このbuild.gradleで実行可能なjarを取得しました
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ファイルが見つからないため、実行に失敗しました。
そして、私はこのコードを追加します:
task copyToLib(type: Copy) {
into "$buildDir/output/libs"
from configurations.runtime
}
しかし、何も変わりません...フォルダoutput/libsが見つかりません...
依存関係のlib jarを指定したフォルダーまたはパスにコピーするにはどうすればよいですか?
追加:
_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)
_
アプリケーションプラグインの方法は、出力が面倒で冗長すぎると感じています。ここで、私が満足したセットアップを取得しました。つまり、サブディレクトリ/lib
に依存関係jarを持つ配布Zipファイルを作成し、すべての依存関係をマニフェストファイルのClass-Path
エントリに追加します。
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
}
要旨としてホスト こちら 。
結果はbuild/distributions
にあり、解凍されたコンテンツは次のようになります。
lib/commons-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
アプリケーションプラグインでは、メインクラス名を次のように設定する必要があります。
mainClassName = "com.test.HelloWorld"
それをビルドスクリプトに追加する必要があります。 Java
コマンドを使用してアプリケーションを実行しようとする場合、-cp
を使用してクラスパスを設定する必要があることに注意してください。
アプリケーションプラグインは、タスク distZip を提供することにより、このプロセスを簡素化します。そのタスクを実行すると、build/distributions
の下に完全なディストリビューションが作成されます。ディストリビューションには、起動スクリプトとすべての依存関係が含まれています。生成された起動スクリプトはすでにクラスパスを設定しているため、これ以上対処する必要はありません。