2016-06-27 3 views
1

私はApache AntプロジェクトをGradleでコンパイルするために進化しています。他のモジュールのデバッグクラスを使ってGradleサブプロジェクトをコンパイルするには

私の目標は、メインプロジェクトの出力をいくつかのサブプロジェクトの依存関係として使用することです。

MainProject: 
-> src/main/java 
-> src/main/resources 
-> src/test/java 
-> src/test/resources 
-> src/mocks/java 

ChildProject1: 
-> src/main/java 
-> src/main/resources 
-> src/test/java 
-> src/test/resources 
-> src/mocks/java 

メインプロジェクトが正しく子ビルド・パスに含まれており、それがリンクをEclipseに来るとき、すべてのリンクが正しく検出された:グローバル設定は次のとおりです。

私はsettings.gradleChildProject用ファイルとビルドでその依存関係の主なプロジェクトが含まれている:私の問題はChildProjectをコンパイルするために、モック/ Javaからの出力を必要とすることであり、それはそうですけれども

dependencies { 
    compile project(':MainProject') 
} 

をGradleコンパイルプロセスにmain/javaファイルである "default"出力が含まれていると、モックの "symbols"が見つからないというエラーメッセージが表示されます。

sourceSets { 
    mocks { 
     java { 
      srcDir 'src/mocks/java' 
     } 
     compileClasspath += sourceSets.main.runtimeClasspath 
    } 
    test { 
     compileClasspath += sourceSets.mocks.output 
     runtimeClasspath += sourceSets.mocks.output 
    } 
} 

を模擬ソースが正しくテストクラスパスに追加されます。

私は、使用するモックを必要MainProjectテストJavaファイルのコンパイルと同様の問題があった、それが追加することで解決しました。

ChilProjectには、MainProjectの出力を使用してテストをコンパイルする方法を教えてください。

答えて

0

私はあなたに正しい方向を指摘しようとします。通常はそうのようなGradleのマルチプロジェクトの依存関係を宣言します。

dependencies { 
    compile project(':projA') 
} 

これは、暗黙的に定義するには、依存関係としてprojAdefault成果物を使用すると言います。

mockあなたのprojA依存関係のアーティファクトを使用することをお勧めします。これを行う方法は次のとおりです。

  1. mainmockのsourceSetからコンパイル済みのクラスファイルを結合するための新しいjarタスクを作成します。 mocksと呼ばれる新しいGradleの構成を作成し、輸出にアーティファクトを割り当てることでprojAビルドで

    task mocksJar(type: Jar) { 
        classifier 'mocks' 
        group 'build' 
        from sourceSets.main.output 
        from sourceSets.mocks.output 
    } 
    
  2. 輸出mockアーティファクト:

    configuration { mocks } 
    artifacts.mocks mocksJar 
    
  3. は、使用してprojAを要するプロジェクトでmocks設定をインポート拡張依存構文:

    dependencies { 
        compile project(path:':projA', configuration:'mocks') 
    } 
    
+0

ありがとう、私は現在あなたの提案から問題を解決しようとしています。 しかし私はメインプロジェクトでアーティファクトをどのように宣言すべきか分かりませんが、設定ブロックが異なるソースセットのコンパイルプロセスを定義するためのものであると理解しているので、 "configuration {mocks}"という行は得られません。 Gradleでアーティファクトを使用したことはありませんでした.Gradleの公式ドキュメントは不明です 次の回答をお待ちしております。 –

+0

ダブルポストについて申し訳ありません。これが何をしているのか分かりません)、コンパイルはスムーズに進みますが、あなたのexempleに続くアーティファクト/ jar宣言がどこにあるべきかわかりません。 –

+0

1.セクション'jarMocks'は' mocks'ソースセットで定義されたモックソースコードを使ってJARをビルドするタスクでなければなりませんmcoks JA Rにプライマリクラスファイルがありません。2.セクションの答えを更新しました。 – cmcginty

関連する問題