Eclipseに大量のソースコードをインポートしたところ、基本的にパッケージ名が無効になりました(コードはフォルダーに移動されました)。すべてのパッケージ宣言が正しく解決されるように、パッケージエクスプローラーですべてのソースコードを選択してホットキーを押す方法はありますか?ソースを選択してctl-shift-oを押すことでインポートでこれを実行できることを知っていますが、パッケージ宣言でも可能ですか?
pdate:パッケージの名前または場所を変更したくないので、パッケージのリファクタリングは機能しません。パッケージ宣言を調整するだけです。 Javaソースコード。
パッケージ宣言が有効でなくなった場合、そのような無効な宣言はすべてEclipseのProblems
ビューに表示されます。このビューが表示されない場合は、ウィンドウ->ビューの表示->その他...->問題(一般タブの下)から開くことができます。
コンテキストメニュー(右クリックで利用可能)のQuick fix
オプションを選択することにより、[問題]ビューで問題にフィルターをかけ、簡単に修正可能な問題を修正できます。あなたの場合、あなたは以下に掲載されているスクリーンショットのようなものを見るはずです:
どちらが正しいかを知っている限り、クイックフィックスオプションの適用は簡単です。クラスのパッケージ宣言を変更するか、クラス自体の場所を変更する必要があります。残念ながら、一度に複数のユニットで問題を修正するオプションはありません。すべての問題にクイックフィックスを適用する必要があります。
この種類の問題のみをフィルタリングする場合は、次のスクリーンショットに示すように、問題のビューを構成して、エラーテキストに「予期したパッケージと一致しない」というテキストコンテンツを含むすべてのエラーを表示することを検討してください。
この特定の問題(通常は自動生成されたアーティファクトファイルに付属)について、私はきちんとした解決策を見つけました。
したがって、パッケージ宣言が「package abc;」であることが問題の場合。 200ファイルで、それを「パッケージcom.aa.bb.cc.abc;」にしたいとします。
次に、Eclipseで「パッケージabc;」の検索->ファイルを検索します。必要なフォルダまたはpkgまたはワークスペース全体。 [検索]オプションを選択せずに、[置換]を選択してから、「パッケージcom.aa.bb.cc.abc;」を配置します。検索後に交換をお願いした場合。トリックを行う必要があります。
パッケージを右クリックして、「リファクタリング」>「名前の変更」を選択します。これにより、すべてのソースファイルが新しいパッケージ名で更新されます。
同じ問題が発生したので、それを行うためのbashスクリプトを作成しました。
function Java-package-update {
for path in $(find $1 -type f -name "*.Java"); do
D=$(dirname $path);
F=$(basename $path);
P=$(echo $D|tr '/' '.');
if egrep -q '^\s*package\s*' $path; then
sed -i '' '/^\s*package\s*/s/^\(\s*package\s*\)[^;]*\(;.*\)/\1 '$P'\2/' $path;
else
echo >&2 "no package in $path";
fi;
done;
}
使用されるsed
コマンドは、OSXのコマンドです。 GNU sedを使用している場合は、-i
の後に ''パラメータを付ける必要はありません。
貼り付けて、ソースを含むディレクトリで実行してください。勇気がない限り、最初にソースをバックアップしてください。
例:
$ cd /home/me/proj/fred/src
$ ls
com
$ cp -a com com.backup
$ Java-package-update com
$ # fingers crossed
$ diff -ru com.backup com
私は本当にこのようなことをPerlのようなより近代的な言語で始めるべきです:)
これでうまくいくはずです。
最初にすべてのファイルをデフォルトパッケージにインポートしてから、それらを新しいパッケージにドラッグします。JDTはリファクタリングを行い、プロジェクト全体のパッケージ宣言を変更します。
これは古い質問ですが、同じ問題に遭遇し、非常に単純なbashスクリプトを作成しました。それが誰かを助けることを願っています。
for i in *.Java; do
sed -i 's/.*package com.example.something;.*/package com.example.something_else;/' $i
done
基本的に、スクリプトはディレクトリ内のすべてのJavaファイルを走査し、package com.example.something;
が出現するたびにpackage com.example.something_else;
に置き換えられます。
ALT+SHIFT+R
パッケージ名の最後にアンダースコアを追加し、ENTER
を2回押しますALT+SHIFT+R
アンダースコアを削除、ENTER
2回パッケージが少ない場合に行われます。