タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【Eclipse】JARファイルのエクスポート/実行確認(Gradleプロジェクト編)

またまたJARファイルの実験ということで。

これまでの実験結果はこちら。

今度は、Elipseで、Gradleプロジェクトを作成してみました。

プロジェクト作成

f:id:no14141:20150530172057j:plain

f:id:no14141:20150530172102j:plain

クラスについては、前回同様です。

プロジェクト構成は、下記の通りです。

f:id:no14141:20150530172108j:plain

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」タスクを実行してみました。

f:id:no14141:20150530172116j:plain

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」ができているではありませんか!!

f:id:no14141:20150530172124j:plain

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タスクなどで自動化できそうです。そちらについては、また別の機会にトライしたいと思います。