今まで普通にjavacとjavaコマンドでJavaを使ってましたが、クラスパスの指定やソースファイル指定がいい加減辛い(ビルド用の.shがかっこ悪い)のでgradleを導入しました。サンプルプロジェクトで流れをメモしておきます
プロジェクト構成
. ├── build │ ├── fruit │ │ ├── bara │ │ │ └── Apple.class │ │ └── mikan │ │ └── Orange.class │ └── main │ └── Main.class ├── lib │ └── hoge.jar └── src ├── fruit │ ├── bara │ │ └── Apple.java │ └── mikan │ └── Orange.java └── main └── Main.java
gradleの初期化
$ gradle init --type java-application
. ├── build │ ├── fruit │ │ ├── bara │ │ │ └── Apple.class │ │ └── mikan │ │ └── Orange.class │ └── main │ └── Main.class ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lib │ └── hoge.jar ├── settings.gradle └── src ├── fruit │ ├── bara │ │ └── Apple.java │ └── mikan │ └── Orange.java ├── main │ ├── Main.java │ └── java │ └── App.java └── test └── java └── AppTest.java
ファイルがかなり増えました。build.gradleにはjavaプロジェクト用に色々書き込まれています。gradleが気を利かせてsrc/main/javaディレクトリを作成していますが必要ないので削除しておきます。testも必要がなければ削除します。
build.gradleをいじる
ソース、クラスファイルディレクトリ指定
ソースディレクトリとコンパイル後のクラスファイルが格納されるディレクトリを指定します。
sourceSets { main { java.srcDirs = ['src'] java.outputDir = file('build') } }
メインクラス指定
メイン関数のあるクラスを指定します。
mainClassName = 'main.Main'
依存ライブラリ指定
compile時とruntime時にそれぞれ依存ライブラリのクラスパスを指定します。
dependencies { // This dependency is found on compile classpath of this component and consumers. compile 'com.google.guava:guava:23.0' + compile fileTree(dir: 'lib', includes: ['hoge.jar']) + runtime files('lib/hoge.jar') // Use JUnit test framework testCompile 'junit:junit:4.12' }
コンパイル、実行
$ gradle compileJava $ gradle run # 上のcompileJavaも含まれている