2016-08-30 7 views
0

私はGradleを使用しています。通常私はFAT瓶を作ります。問題はありませんでしたが、現時点では、NON-FATジャーを作る必要もあります。 私は次のような-cpオプションを使用して、すべての依存元のライブラリと実行瓶除外する意味:ここでオンデマンドでGradleでNON-FAT jarを作成する

java -jar myjar.jarが同じものであり、そのdepended.jarが含まれ、FATジャーで)

java -cp "/sample1/lib/myjar.jar:/sample2/lib/depended.jar" com.example.main.Runner

をされます私のbuild.gradle

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

jar.baseName = 'myjar' 
version = '' 
def mainClass = 'com.example.main.Runner' 
mainClassName = mainClass 

def defaultEncoding = 'UTF-8' 

repositories { 
    flatDir dirs: "${projectDir}/libs" 
} 

dependencies { 
    compile ':commons-chain:1.2' 
    compile ':commons-io:2.4' 

    testCompile ':junit:4.12' 
    testCompile ':hamcrest-core:1.3' 
} 
jar { 
    manifest { 
     attributes 'Implementation-Version': version, 
       'Main-Class': mainClass 
    } 
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 
} 

通常のFAT jarの作成では、このままにしておきたいと思います。 だから、私は、次のようなタスクを追加しようとした:

TRY#1

task makeSlimJar { 
    jar.baseName = 'myjar.slim' 
    jar { 
    manifest { 
     // remove main class 
     attributes 'Implementation-Version': version 
    } 
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 
} 

TRY#2

task makeSlimJar { 
    jar.baseName = 'myjar.slim' 
    jar { 
    manifest { 
     // remove main class 
     attributes 'Implementation-Version': version 
    } 
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 

    tasks.Jar.execute() 
} 

TRY#3

task makeSlimJar { 
    jar.baseName = 'myjar.slim' 
    jar { 
    manifest { 
     // remove main class 
     attributes 'Implementation-Version': version 
    } 
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 
    dependsOn Jar 
} 

それを添付した後私はgradle makeSlimJarを実行しました。 上記のすべての試行は失敗しました(プログラムでは成功しました)、ちょうど名前がmyjar.slim.jarのFATジャーを作成しました。

同じbuild.gradleファイルにFATとNON-FAT jarを一緒に使用する方法はありますか? ...または私は何か間違っていますか?

NON-FAT jarのapply plugin: 'application'を削除することが私の最後の手段だと考えています。

可能であればお手伝いください。

おかげで、

答えて

1

実際にあなたのjarファイルに依存関係を追加しているコードは、この行です:あなたが持っていることを除いて

from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 

ビルドスクリプトは、通常、デフォルトでは「スリムなjarファイル」を構築しますこの動作を変更するためのコードを追加しました:

jar { 
    manifest { 
    attributes 'Implementation-Version': version, 
      'Main-Class': mainClass 
    } 
    from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 
} 

私はこれらの行を削除することをお勧めします。 gradle clean buildを実行すると、通常のjar(依存関係なし)が構築されます。

あなたは、このようなあなたの「fatjar」を作成するために、追加のタスクを追加することができます。

task fatjar << { 
    jar.doFirst { 
     println "creating fatjar" 
     jar { 
     from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} 
     } 
    } 
} 

あなたはgradle clean fatjar buildを実行してfatjarを構築するために、このタスクを使用することができます。

また、springbootなどのフレームワークを見てみることもできます。これは、すべてこれを行います。

+0

ありがとうございます。 あなたの提案によると、私は 'jar {}'セクションを削除し、 'fatjar'タスクを追加しました。 これは完璧に動作します!どうもありがとうございます。 – tkhm

関連する問題