2016-02-18 15 views
8

intellijの伝統的なJavaアプリケーション(アンドロイドプロジェクトではない)のさまざまなソースセットに基づいてビルドバリアントを使用することは可能ですか?intellij javaアプリケーションのバリアント(製品のフレーバー)

アンドロイドのgradleプラグインに付属しているproductFlavorsのような機能を使用したいと思いますが、従来のJavaアプリケーションでは使用します。

例:

library_red -- HelloImpl.java 
library_blue -- HelloImpl.java 
library_common -- Hello.java 

compiled library_blue -- Hello.class, HelloImpl.class 
compiled library_red -- Hello.class, HelloImpl.class 

答えて

0

答えはイエスですが、あなたは非常にインキュベートされた新しいGradleのソフトウェアモデルを使用する必要があります。私がC/Cppプロジェクトに使用することを学んだので、あなたがトレイルブレザーになるので、それは痛みでいっぱいです。ここにあなたのビルドがどのように見えるかを概説します。

plugins { 
    id 'jvm-component' 
    id 'java-lang' 
} 

model { 
    buildTypes { 
    debug 
    release 
    } 
    flavors { 
    free 
    paid 
    } 
    components { 
     server(JvmLibrarySpec) { 
      sources { 
       java { 
        if (flavor == flavors.paid) { 
        // do something to your sources 
        } 
        if (builtType == buildTypes.debug) { 
        // do something for debuging 
        } 
        dependencies { 
         library 'core' 
        } 
       } 
      } 
     } 

     core(JvmLibrarySpec) { 
      dependencies { 
       library 'commons' 
      } 
     } 

     commons(JvmLibrarySpec) { 
      api { 
       dependencies { 
        library 'collections' 
       } 
      } 
     } 

     collections(JvmLibrarySpec) 
    } 
} 

参考:私たちは私たちのバリアントシステム用のGradleマルチモジュールプロジェクトを使用https://docs.gradle.org/current/userguide/java_software.html

0

。共通コードを含むコアプロジェクトがあります。カスタマイズはサブプロジェクトで簡単に実行されます。

subprojects { 
    dependencies { 
    compile project(':core') 
    } 
} 

異種サブプロジェクトはコアに依存し、それぞれは個別の.warファイルを作成します。この例では、コアプロジェクトのクラスをオーバーライドしないことに注意してください。コードのカスタマイズのために、Springと場合によってはSPIを使用していますが、依存性注入フレームワークでこれを達成できると思います。それは、コアに明示的な拡張ポイントを提供することを強制するだけです。これは良いことだと思います。

関連する問題