2013-08-12 6 views
6

私は3つの異なるプロジェクトを持つマルチプロジェクト構成を持っています。異なるJavaソースの互換性を持つプロジェクトのコンパイル

2つのプロジェクトは、私が「コア」という3番目のプロジェクトに依存しています。 プロジェクトに応じて、 'core'は1.4と1.6のソース互換性を持つjarファイルにコンパイルして出力core-1.4.jarとcore-1.6.jarに出力する必要があります。

これを単一のbuild.gradleで行うことは可能ですか、これを行うにはどうすればよいでしょうか?どのように私は2つのプロジェクトのそれぞれの依存関係に特にjarを指定できますか?

+0

はい、ターゲットの互換性もあります。私は試しました: sourceCompatibility = 1.4 targetCompatibility = 1.4 タスクで、これは動作しません。ターゲットの1つはJava MEで、もう1つはAndroidです。 –

+0

正確には動作しません。 –

答えて

12

質問は基本的に、同じJavaコードに基づいた2つのアーティファクトのバリエーションを生成し、消費する方法についてです。ターゲットの互換性が異なる2つのJarを実際に作成する必要がある場合(最初に質問します)、これを実現する1つの方法は、Javaプラグインのmainソースセット(およびそれに伴うタスク)を使用して、第1のバリエーションと、第2のバリエーションを生成するための新しいソースセットとを含む。さらに、第2のバリエーションは、独自の構成を使用して公開する必要があり、従属プロジェクトがそれを参照できるようにする必要があります。これは以下のようになります:

コア/ build.gradleを:

応じたプロジェクトで
apply plugin: "java" 

sourceCompatibility = 1.4 

sourceSets { 
    main1_4 { 
     def main = sourceSets.main 
     java.srcDirs = main.java.srcDirs 
     resources.srcDirs = main.resources.srcDirs 
     compileClasspath = main.compileClasspath 
     runtimeClasspath = main.runtimeClasspath 
    } 
} 

compileJava { 
    targetCompatibility = 1.6 
} 

compileMain1_4Java { 
    targetCompatibility = 1.4  
} 

jar { 
    archiveName = "core-1.6.jar" 
} 

main1_4Jar { 
    archiveName = "core-1.4.jar" 
} 

configurations { 
    archives1_4 
} 

artifacts { 
    archives1_4 main1_4Jar 
} 

dependencies { 
    compile project(":core") // depend on 1.6 version 
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version 
} 

このすべてのことが可能(ただし、する必要はありません)で行うこと同じビルドスクリプト。詳細については、Gradle User Guideの「マルチプロジェクトビルド」の章を参照してください。

+0

ありがとうございます。これまでの私の問題は、compileClasspath = を設定していたため、コアプロジェクトのjarがパスから削除されていました。 +に変更すると問題が解決しました。 –

+0

私は自分の答えを完全に見直す必要があることに気がつきました。今は真実にもっと近いはずです。 –

関連する問題