11

1 つのメイン プロジェクトと 1 つのサブプロジェクトの 2 つのプロジェクトをセットアップしました。これらは Java プロジェクトです。それらはすべて同じディレクトリの下にあります。

ディレクトリ構造は次のようになります。

 ./dev
   ./Project_A
     build.gradle
     settings.gradle
   ./Project_B
     build.gradle

Project_A には Project_B が含まれます。

Project_A settings.gradle は次のようになります。

includeFlat 'Project_B'

Project_A build.gradle には以下が含まれます:

compile project(':Project_B')   

コマンド ライン ( gradlew clean build ) からコンパイルすると、問題 Project_A は Project_B のクラスを見逃します。Project_B は Project-A のクラスパスに属していないようです。

Project_A ディレクトリで実行されたgradlew クリーン ビルドからの (出力の一部) を次に示します(その後、すべて「パッケージ project_b.xy が見つかりません」および「シンボルが見つかりません」(Project_B から):

:clean
:Project_B:clean
:Project_B:compileJava
:Project_B:processResources
:Project_B:classes
:Project_B:jar UP-TO-DATE
:compileJava
...Starts erroring out here...

クラスパスの問題だと思いますが、修正方法がわかりません。

前もってありがとう、JM

PS:2つのプロジェクトビルド(最初は3つから)で問題を再現できたので、質問を編集しました

4

2 に答える 2

10

Java クイックスタートに基づく: マルチプロジェクト Java ビルド:

1)settings.gradleファイルはdev/ではなくdev/project_Aにある必要があり、次のようなものが含まれている必要があります。

include 'Project_A', 'Project_B'

2)次に、dev/Project_A/build.gradleファイルに含まれている必要があります

dependencies {
    compile project(':Project_B')
}

編集:

質問で説明したプロジェクトのレイアウトに従って、おもちゃの例を作成しました。ただし、問題を再現できませんでした。おそらく、特定のエラーの原因となっているいくつかの違いを見つけることができるでしょう:

ディレクトリ ツリー

├──Project_A
│ ├── build.gradle
│ ├── settings.gradle
│ └── src
│ └── メイン
│ └──ジャワ
│ └── あ
│ └── A.java
└──Project_B
    ├──build.gradle
    └── src
        └──メイン
            └──ジャワ
                └──う
                    └──B.ジャバ

Project_A/build.gradle

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'a.A'

dependencies {
    compile project(':Project_B')
}

Project_A/settings.gradle

includeFlat 'Project_B'

A.java

package a;
import b.B;

public class A {
    public static void main(String[] args) {
        System.out.println("From A.main...");
        B.call();
    }
}

Project_B/build.gradle

apply plugin: 'java'

B.java

package b;

public class B {
    public static void call() {
        System.out.println("Calling B");
    }
}

から Gradle を実行するProject_Aと、出力は次のようになります。

$ gradle クリーン ビルドの実行
:clean UP-TO-DATE
:Project_B:clean UP-TO-DATE
:Project_B:compileJava
:Project_B:processResources UP-TO-DATE
:Project_B:クラス
:Project_B:jar
:コンパイルJava
:processResources UP-TO-DATE
:クラス
:ジャー
:組み立てる
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:最新のテスト
:UP-TO-DATEをチェック
:建てる
:Project_B:組み立てる
:Project_B:compileTestJava UP-TO-DATE
:Project_B:processTestResources UP-TO-DATE
:Project_B:testClasses UP-TO-DATE
:Project_B:test UP-TO-DATE
:Project_B:UP-TO-DATE をチェック
:Project_B:ビルド
:走る
A.main から...
Bを呼び出す

ビルド成功
于 2014-05-02T13:20:23.220 に答える
1

わかりました、これが誰かに役立つ場合に備えて、.claspath ファイルを実際に削除 (git rm) することで、最終的にこれが機能するようになりました。.gitignore にあったのですが、なぜかいつの間にかコミットされて遊んでいたようです。

これを実行して Eclipse にプロジェクトを再インポートすると、すべて正常に戻りました。

助けようとした人に感謝します。

于 2014-05-09T13:20:38.103 に答える