2013-02-03 9 views
26

にJARファイルのライブラリの依存関係をコピーするにはどうすればこのbuild.gradleはGradleの

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

manifest.mainAttributes("Main-Class" : "com.test.HelloWorld") 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile (
     'commons-codec:commons-codec:1.6', 
     'commons-logging:commons-logging:1.1.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpcore:4.2.1', 
     'org.apache.httpcomponents:httpmime:4.2.1', 
     'ch.qos.logback:logback-classic:1.0.6', 
     'ch.qos.logback:logback-core:1.0.6', 
     'org.slf4j:slf4j-api:1.6.0', 
     'junit:junit:4.+' 
    ) 
} 

で実行可能なjarファイルを得たが、依存関係のjarファイルを見つけることができないので、それは、失敗した実行されます。

、その後、私はこのコードを追加します。

task copyToLib(type: Copy) { 
    into "$buildDir/output/libs" 
    from configurations.runtime 
} 

何も変更...私はフォルダ出力/ libsのを見つけることができません...

私は依存関係のLIBSのjarファイルをコピーすることができますどのように

指定したフォルダまたはパス?

+0

コードをどのように実行しますか? –

+0

@PeterNiederwieser Niederwieserfirst実行:gradleビルド、実行可能なjarファイル を実行し、jarファイルを実行します。java -jar XXX.jar – jychan

+0

コピーの代わりにSyncを使用します。関連項目https://docs.gradle.org/current/userguide/working_with_files.html#sec:sync_task – morty

答えて

1

アプリケーションのプラグインは、次のようにメインクラス名を設定する必要があります:

mainClassName = "com.test.HelloWorld" 

あなたのビルドスクリプトにそれを追加する必要があります。 javaコマンドでアプリケーションを実行しようとすると、クラスパスも-cpに設定する必要があることに注意してください。

アプリケーションプラグインは、distZipタスクを提供することでこのプロセスを簡素化します。このタスクを実行すると、フル配布がbuild/distributionsの下に作成されます。この配布には、開始スクリプトとすべての依存関係が含まれています。生成された開始スクリプトはすでにクラスパスを設定していますので、これ以上対処する必要はありません。

31

追加:

build.dependsOn(copyToLib) 

ときgradle build実行、Gradleのタスクを構築し、どんなタスクがそれに依存する(dependsOnによって宣言されました)。 build.dependsOn(copyToLib)を設定しないと、Gradleはコピータスクをビルドタスクに関連付けません。だから、

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

manifest.mainAttributes("Main-Class" : "com.test.HelloWorld") 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile (
     'commons-codec:commons-codec:1.6', 
     'commons-logging:commons-logging:1.1.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpcore:4.2.1', 
     'org.apache.httpcomponents:httpmime:4.2.1', 
     'ch.qos.logback:logback-classic:1.0.6', 
     'ch.qos.logback:logback-core:1.0.6', 
     'org.slf4j:slf4j-api:1.6.0', 
     'junit:junit:4.+' 
    ) 
} 

task copyToLib(type: Copy) { 
    into "$buildDir/output/libs" 
    from configurations.runtime 
} 

build.dependsOn(copyToLib) 
+0

SonarQube解析で、Javacode ASTスキャン中にERROR/WARNが発生しました - クラスxx.yy.zzが見つかりませんでした。これを修正するために、コンパイル、テストコンパイル、実行時に必要なすべてのjar(依存関係)を含む "sonar.java.libraries"を設定しなければなりませんでした。私は "configurations.estunit"から "configurations.compile"から "configurations.runtime"を追加しました。私は "build/dependent-jars"フォルダにすべてのjarファイルを持っています。設定sonar.java.libraries = build/dependent-jars/*。jarエラーは表示されません。おかげさまで、gradleはワークスペースの外にキャッシュを保持していますが、このコードを使用してビルドフォルダに.jarを取得できました。 –

10

私は、その出力で、あまりにも面倒な、あまりにも冗長アプリケーションのプラグインの方法を見つけます。

要旨 hereとしてホスト
apply plugin: 'java' 
apply plugin: 'java-library-distribution' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.apache.commons:commons-lang3:3.3.2' 
} 

// Task "distZip" added by plugin "java-library-distribution": 
distZip.shouldRunAfter(build) 

jar { 
    // Keep jar clean: 
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF' 

    manifest { 
     attributes 'Main-Class': 'com.somepackage.MainClass', 
        'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ') 
    } 
    // How-to add class path: 
    //  http://stackoverflow.com/questions/22659463/add-classpath-in-manifest-using-gradle 
    //  https://gist.github.com/simon04/6865179 
} 

:ここで私は最終的に私はすなわち、サブディレクトリ/libに依存瓶で配布zipファイルを作成し、満足していたセットアップを持って、マニフェストファイルのClass-Pathエントリにすべての依存関係を追加する方法を説明します。

結果はbuild/distributionsで見つけることができますし、解凍した内容は次のようになります。

のlib /コモンズ-lang3-3.3.2.jar
MyJarFile.jar

内容MyJarFile.jar#META-INF/MANIFEST.mf

マニフェスト - バージョン:1.0
メインクラス:com.somepackage.MainClass
クラスパス:lib/commons-lang3-3.3.2。jar

+1

ありがとう偉大な仕事馬 ' –