2012-04-09 5 views
0

現在のJavaプロジェクトでは、パッケージ "fr.inria.arles.pankesh.gen"からパッケージ "fr.inria.arles.pankesh.impl"にいくつかのJavaファイルをコピーするJavaプログラムを作成しました。Javaコードからパッケージ情報を変更するにはどうすればよいですか?

"fr.inria.arles.pankesh.gen"パッケージから "fr.inria.arles.pankesh.impl"パッケージにJavaファイルをコピーした後、Javaファイルのパッケージ情報の変更により、私のJavaファイルにエラーが発生しています。

私の質問は、 "自分のプログラムがJavaファイルをパッケージ" fr.inria.arles.pankesh.gen "からパッケージ" fr "にコピーするときに、ヘッダ内のパッケージ情報(Javaコードを介して、手動ではなく)を変更する方法はありますか? .inria.arles.pankesh.impl "

+4

あなたは、あなたの質問のいくつかに答えを受け入れる必要があります。 – DrColossos

+0

いいえ、あなたのいずれかすべてのパッケージ文を編集するか、リファクタリング機能を備えた実際のIDEを使用する必要があります。 – duffymo

+2

@duffymo EclipseはJavaで書かれています。 ctoring機能はパッケージ宣言の名前を変更します。これを行う方法があります。 – Jeffrey

答えて

3

あなたがJavaソースファイルをコピーする場合、あなたは

  1. オープンソースファイルに必要です。
  2. 宛先ファイルを開きます。
  3. packageというキーワードが表示されるまで、ソースから送信先までのすべてをコピーします。
  4. パッケージキーワードをコピー先のファイルにコピーします。ソースファイル内
  5. 先ファイルに「corrrect」パッケージの場所を書く
  6. 「間違った」パッケージの場所にわたってスキップ
  7. 宛先ファイルにソース・ファイルからコンテンツの残りの部分を書きます。

これは、ファイルのパッケージを正しく「リベース」することに注意してください。 "古い"パッケージでそのファイルを見つけることが期待されるかもしれない他のファイルを "rebase"することは何もしません。これらの他のファイルを修正するには(プロジェクトが存在する場合は、参照があまりないように設計されているか、すべてのファイルをコピーする予定です)、プロジェクト内の各ファイルを開き、 importステートメント見つけた場合は、でなく、インポートをコピーして正しい置換えにコピーする必要があります。

実際には「移動」せずに変更する必要のあるファイルを操作する場合、一時ファイルを書き込んでから、一時ファイルが完全に書き込まれた後に元のファイルと置き換えることをお勧めします。これと同じように:

(reading) MyClass.java 
(writing) .tempMyClass.java 
(done writing) 
(moving) .tempMyClass.java to MyClass.java 

これは、あなたがから読み取る必要がある場所のファイルの過去の書き込みのように、厄介な項目の数によって制約されないことを可能にする(あなたはそれを読む前に必要な情報を破棄されます)。

パッケージjava.ioとクラスjava.lang.Stringには、これらのツールを書くことができるすべてのユーティリティがありますが、詳しく説明すると長すぎる投稿になります。ちょっと書いてみてください(Webでファイルから行を読み込むにはどうすればいいですか、Javaでファイルに行を書き込むにはどうすればよいですか)。エラーや誤解、そして多くの人々が喜んで助けてくれるでしょう。

すでにコンパイルされたファイルに対してこれを実行する場合は、Javaクラスファイル形式のビットを読み込み、クラス名の定数文字列を見つけて、上記と同様の手順で変更しますバイナリバイトを書く)、またはASMのようなライブラリを使って上記と同じ手順を行うことができます(ただし、手作業で行うときに間違えることはありません)。

+0

これは非常に退屈で時間のかかる解決策です。私はそれを受け入れますが、それは私の状況には関係ありません。 – Pankesh

+0

これは面倒で時間のかかる解決策です。しかし、それはまさにあなたがすることを求めているので、あなたの文脈に正確に関係しています。これを行わずにJava言語仕様を尊重する方法が異なる場合は、独自の質問に対する答えとして記述してください。これを自動化するJavaプログラムを作成することで、退屈な作業をやめることができますが、_less_作業を行うことはできません。また、有効なJavaプロジェクトではないため、最終結果をコンパイルすることはできません。 –

1

あなたは努力の多くと、

  1. はあなたにJavaファイルを解析することを行うには、(それはあなたのコメントや文字列でのpackage単語がある場合にだけ考慮し、容易ではない)、それらを更新することができます。
  2. あなたはそれらを参照するすべてのクラスを更新する必要があります(インポートステートメントを変更し、完全修飾されたクラス名を変更し、同じパッケージ内のクラスにインポートステートメントを追加する(これは隣人であり、 import文)。

私はあなたが使用してIDE(など)のEclipse、NetbeansのまたはIDEAとして、そのリファクタリング機能を使用することをお勧めします。

関連する問題