0

Gradle とその ShadowJar プラグインを使用して、アプリケーション用のファット jar を作成します。これは、2 つのコンテキストのいずれかにデプロイされます。

あるコンテキストでは、環境は依存関係 A、B、および C (およびそれらのすべての推移的な依存関係) を提供し、これらのクラスは私のファット jar の一部であってはなりません。

他のコンテキストでは、環境は依存関係 A と B のみを提供し、C とそのすべての推移的な依存関係が私のファット jar にバンドルされていることを確認する必要があります。

Gradle ビルド ファイルでこの動作を定義するにはどうすればよいですか? runtime.exclude最善の方法は、ビルド ターゲットまたはコマンド ライン パラメーターに基づいて何らかの方法でプロパティを調整することだと思います。

4

2 に答える 2

0

だから私はあなたが2つの構成を探していると思います。

apply plugin: 'groovy'

repositories {
    jcenter()
}

dependencies {
    compile localGroovy()
    compile 'org.slf4j:slf4j-api:1.7.21'
    compileOnly group: 'com.google.guava', name: 'guava', version: '20.0'
    testCompile 'junit:junit:4.12'
}

task fatJar(type: Jar) {
    from sourceSets.main.output, configurations.compile
    baseName = "$project.name-fat"
}

jar.dependsOn fatJar

これで、デプロイ先のコンテキストごとに jar を作成できます

$ ./gradlew clean build
Configuration on demand is an incubating feature.
:clean
:compileJava UP-TO-DATE
:compileGroovy
:processResources UP-TO-DATE
:classes
:fatJar
:jar
:assemble
:compileTestJava UP-TO-DATE
:compileTestGroovy UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

Total time: 4.997 secs

太った瓶があることを確認しましょう

$ unzip build/libs/q40727142-fat.jar -d build/libs/included
Archive:  build/libs/q40727142-fat.jar
   creating: build/libs/included/META-INF/
  inflating: build/libs/included/META-INF/MANIFEST.MF  
   creating: build/libs/included/com/
   creating: build/libs/included/com/jbirdvegas/
   creating: build/libs/included/com/jbirdvegas/q40727142/
  inflating: build/libs/included/com/jbirdvegas/q40727142/Hello.class  
  inflating: build/libs/included/groovy-all-2.4.7.jar  
  inflating: build/libs/included/slf4j-api-1.7.21.jar  

元の構成に提供されると予想される jar がないことを確認します。

$ unzip build/libs/q40727142.jar -d build/libs/notIncluded
Archive:  build/libs/q40727142.jar
   creating: build/libs/notIncluded/META-INF/
  inflating: build/libs/notIncluded/META-INF/MANIFEST.MF  
   creating: build/libs/notIncluded/com/
   creating: build/libs/notIncluded/com/jbirdvegas/
   creating: build/libs/notIncluded/com/jbirdvegas/q40727142/
  inflating: build/libs/notIncluded/com/jbirdvegas/q40727142/Hello.class
于 2016-11-22T04:51:49.410 に答える
0

次のようなビルドファイルを使用しました。

subprojects {
    apply plugin: "java"
    apply plugin: "scala"
    version = "1.0-SNAPSHOT"
    group = "com.example.projects"
    ext.deployEnv = "Env1"

    if (project.hasProperty("deployEnv")) {
        ext.deployEnv= project.property("deployEnv")
    }
}

project(":myproject") {
    configurations {
        runtime.exclude group: 'A'
        runtime.exclude group: 'B'
    }

    if (ext.deployEnv == 'Env0') {
        configurations {
            runtime.exclude group:'C'
        }
    }
}

ビルドファイルへの最小限の変更で、私が望むことを行います。

于 2016-11-23T01:55:55.043 に答える