またまたJARファイルの実験ということで。
これまでの実験結果はこちら。
今度は、Elipseで、Gradleプロジェクトを作成してみました。
プロジェクト作成
クラスについては、前回同様です。
プロジェクト構成は、下記の通りです。
build.gradle
apply plugin: 'java' apply plugin: 'eclipse' sourceCompatibility = 1.8 targetCompatibility = 1.8 jar.baseName = 'test' version = '1.0' repositories { mavenCentral() } dependencies { compile 'com.google.guava:guava:18.0' testCompile group: 'junit', name: 'junit', version: '4.+' } test { systemProperties 'property': 'value' } jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version attributes "Main-Class" : "tigertaizo.Test03" } from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
JARファイルの作成
gradleに関する知識が乏しいので、間違っているかもしれませんが、「clean」タスク実行後、「build」タスクを実行してみました。
build時のログ
[sts] ----------------------------------------------------- [sts] Starting Gradle build for the following tasks: [sts] :build [sts] ----------------------------------------------------- :compileJava :processResources UP-TO-DATE :classes :jar :assemble :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test UP-TO-DATE :check UP-TO-DATE :build BUILD SUCCESSFUL Total time: 6.146 secs [sts] ----------------------------------------------------- [sts] Build finished succesfully! [sts] Time taken: 0 min, 6 sec [sts] -----------------------------------------------------
成功しました!
すると、「PROJECT_HOME/build/libs」の中に、「test-1.0.jar」ができているではありませんか!!
JARファイル実行テスト
さあ、出来立てのJARファイルをLinuxへ!
JARを配備し、パスを通して、クラス1~4を実行!! すべてオッケー!!!
Gradle最高すぎ!!!!
$ vim ~/.bash_profile CLASSPATH=/home/tigertaizo/lib/test-1.0.jar:. export CLASSPATH=$CLASSPATH $ source ~/.bash_profile $ echo $CLASSPATH /home/tigertaizo/lib/test-1.0.jar:. $ java tigertaizo.Test01 run Test01#main. Test01は、正常終了しました。 $ java tigertaizo.Test02 run Test02#main. Test02は、異常終了しました。 $ java tigertaizo.Test03 run Test03#main. 文字列sは、null または 空白です。 $ java tigertaizo.Test04 run Test04#main. Exception in thread "main" java.lang.NullPointerException at tigertaizo.Test04.main(Test04.java:6)
最後に、gradleのビルド処理でできたJARを展開してみました。
test-1.0.jar │ ├─com │ └─google │ (※中身は省略) │ │ ├─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─com.google.guava │ └─guava │ pom.properties │ pom.xml │ └─tigertaizo Test01.class Test02.class Test03.class Test04.class
MANIFEST.MF
Manifest-Version: 1.0 Implementation-Title: Gradle Quickstart Implementation-Version: 1.0 Main-Class: tigertaizo.Test03
下記の設定では、Extract required libraries into generated JAR(生成されるJARに必須ライブラリーを抽出)になるようです。
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
今回は、JARの取り出しや配備は、手作業でやりましたが、実際にはuploadArchivesタスクなどで自動化できそうです。そちらについては、また別の機会にトライしたいと思います。