17

*.javaさまざまなパッケージのクラスを含むソース ファイルがたくさんあります。これらのファイルをすべて Eclipse プロジェクトにインポートしようとしていますが、Eclipse は常にそれらをデフォルト パッケージに配置します。

さまざまなパッケージをすべて手動で作成する必要がないように、各ファイルを適切なパッケージ サブディレクトリに配置するように Eclipse に指示するにはどうすればよいですか?

ファイル システム機能からのインポートと、ファイルのプロジェクトへのコピーを試みましたが、これらはすべて、各ファイルの先頭にdefault明示的に記載されているものではなく、パッケージにファイルを配置しpackageます。

関連する SO の質問は、プロジェクトのsrcディレクトリ階層外のパッケージの参照、適切なパッケージ ディレクトリへのファイルの手動作成、ステートメントの欠落importパッケージの一括名前変更のみを扱いますが、この問題はまだ議論されていないようです。

更新:コメントで要求されているように、いくつかのサンプル ファイルを次に示します。

Test1.java

package some.random.pkg;

public class Test1 {
}

Test2.java

package some.other.pkg;

public class Test2 {
}

Test3.java

package yet.another.pkg;

public class Test3 {
}

それらをすべて同じディレクトリに配置してから、さまざまなパッケージのディレクトリを手動で作成せずに、それらを Eclipse の Java プロジェクトにインポートしてみてください。

更新 2:規模を明確にするために、これらのようなファイル (もちろん、より多くのコンテンツを含む ;-)) が実際には毎週約 100 個あると仮定します。これが、自動化されたソリューションを探している理由です。

4

6 に答える 6

9

少し退屈だったので、Java アプリを作成して、現在の作業フォルダーからすべての .java ファイルを取得し、適切なサブフォルダーに配置しました。

次に、新しく作成したフォルダー/ファイルをコピーして Eclipse に貼り付けることができます。

ソースコードと実行可能な .jar: https://github.com/felipeweber/OrganizeJavaSources

これを実行するには、すべての .java ファイルがあるフォルダーに実行可能な .jar をコピーして貼り付け、プロンプトまたはコマンド ラインから java -jar OrganizeJavaSources.jar を使用して実行します。Linux と Windows (そしておそらく MacOS も) の両方で動作するはずです。

私のテストでは、正常なファイルで完全に機能しました。エラー処理などは行っていませんが、お気軽に貢献してください。

幸運を

于 2013-01-04T18:00:39.063 に答える
2

ハックが必要です。Linux を使用していることを願っています。

1- .sh ファイルを読み取って実行する小さな Java プログラムを作成します。スクリプトから読み取る方法を示すスニペットを次に示します。

 ProcessBuilder pb = new ProcessBuilder("myshell.sh", "myArg1", "myArg2");
 Process p = pb.start();

2- .sh スクリプトを作成し、Java がそれを正しく選択していることを確認します (スクリプトにエコー メッセージを配置し、出力されていることを確認します)。

3- このハックの目的は、拡張子が .java のすべてのファイルを読み取るgrepを使用して、それらを正しいフォルダーに配置するmvプログラムにパイプすることです。

4- catを使用して各ファイルを読み取ることができるため、どのフォルダー(パッケージ)に何を配置するかを見つける方法が可能になり、この方法でファイルの移動先を決定できます。mkdirコマンドは、ファイルを移動する前にフォルダーを正しく作成するのに役立ちます。

5- この解決策についてよくわからない場合は、これは非常に複雑な作業であり、よく調べてすべてのパターンを認識する必要があることをお伝えします。私はそれが可能であり、条件付きパイピング ロジックとリラックスできる素敵なチルアウト ミュージックを使用して集中力を高めることができると確信しています。

ここで、気分をリフレッシュするためにいくつかのBASH ガイドを終了します

2013 年もよろしくお願いいたします。

于 2013-01-06T23:46:39.860 に答える
2

このリンクによると、実際にやりたいことを得ることができます。

ファイル -> 新しいプロジェクト/動的 Web プロジェクト

それから

[ファイル] -> [新しいフォルダー] で、[詳細設定] をクリックし、[ファイル システム内のフォルダーへのリンク] を選択します。

その後、フォルダーを右クリックし、BuildPath -> Use as source folder..それだけです..

また

新しいフォルダーを作成し、*.java ファイルを含む最上位のフォルダーをコピーして貼り付けることができます。それを右クリックして BuildPath -> Use as source folder... を選択します。

うまくいくことを願っています!!

于 2012-12-31T11:40:41.893 に答える
2

私たちはプログラマーですよね?私が調査を行う限り、IDE でこの種の機能を見つけるのはちょっと難しいです。なぜなら、プログラマーは Java ファイルを間違ったパッケージに入れ、プログラマーのために自動的に配置してはならないことを警告する必要があるからです。

ファイル操作を実行できる単純な Java コンソール プログラムを作成することをお勧めします。これは、プログラムの可能なアルゴリズムになります

  1. .java ファイルを読み取る
  2. その.javaファイルpackageのターミネータまでの行を確認してください;
  3. パッケージ名に従ってそのファイル.を再配置します。ディレクトリ区切り記号に置き換えると、ファイルを再配置するアドレスとして使用できます。
  4. ファイルの移動先フォルダが存在しない場合はフォルダを作成する
  5. すべてのファイルが再配置されるまで、これを繰り返します。

私はまた、Eclipseだけでなく他のIDEでもこの種の機能を望んでいます。この質問のさらなる回答を待っています。

于 2012-12-31T09:59:18.873 に答える
1

だからこれは私がしたことです...

  1. 新規 -> Java プロジェクト (オプション: [ソースとクラス ファイルのルートとしてプロジェクト フォルダーを使用する] をクリックします)

  2. [追加ソースをリンク] を選択します ([詳細] の下)。

  3. 「リンクされたフォルダーの場所」を参照し、最上位のフォルダー (すべてのパッケージなどを含む) を選択します。

  4. 終了

すでにプロジェクトを作成している場合...

  1. パッケージ エクスプローラーでプロジェクトを右クリックし、[プロパティ] を選択します。

  2. 「Javaビルドパス」を選択

  3. [ソース] タブで [リンク ソース] を選択します。

  4. 「リンクされたフォルダーの場所」を参照し、最上位のフォルダー (すべてのパッケージなどを含む) を選択します。

  5. 終了

ファイルがその中で定義されているパッケージに対応するディレクトリにない場合は、ファイルのバックアップを取って (つまり、それらをすべて別のディレクトリにコピーして)、これを試してください:

次のプログラムをjavac MakePackDirs.javaでコンパイルし、 java MakePackDirsを使用して実行します。パッケージ宣言に従ってディレクトリとファイル構造が作成され、上記の手順が使用されます。

import java.util.regex.*;
import java.util.*;
import java.io.*;

public class MakePackDirs {

    public static void main(String[] args) throws Exception {

        String pkg;

        for (File f : new File(".").listFiles(
            new FilenameFilter () {
               public boolean accept (File dir, String name) {
                   return name.endsWith(".java");
               } })) {

            if (f.isDirectory()) continue;

            System.out.println("Processing " + f.getName());
            Scanner s = new Scanner(f);
            try {
                Pattern p = Pattern.compile("^[ ]*package +[^;]*", 
                            Pattern.MULTILINE);
                if ((pkg = s.findWithinHorizon(p,0))==null) continue;
            }
            finally {
                s.close();
            }

            System.out.println("Found " + pkg);

            pkg = pkg.split(" ")[1];
            pkg = pkg.replaceAll("\\.","/").trim();

            System.out.println("Creating " + pkg);

            File dir = new File(pkg);
            boolean created = dir.mkdirs();

            if (!created && !dir.exists()) 
                throw new Exception("Can't create package directory");

            // Moving file
            File dest = new File(dir, f.getName());
            boolean renamed = f.renameTo(dest);

            if (!renamed) 
                throw new Exception("Can't move file to " + dest.getPath());

            System.out.println(f.getName() + " moved to " + dir.getPath());
        }
    }
}
于 2013-01-04T17:04:09.613 に答える
1

ファイルが間違ったパッケージにある場合、Eclipse は、ファイルを移動してエラーを修正するように提案します。「クイック修正」機能 (エラー ビューで選択し、CTRL + 1 を押す) を使用すると、それらを簡単に移動できます。一度にすべてを選択してみてください。Eclipse のバージョンが私のバージョンよりも新しく、すべてを一度に修正できる可能性があります。そうでない場合でも、手動でパッケージを作成するよりも高速です。

于 2012-12-31T10:51:47.210 に答える