私が使用して自分のプロジェクトを実行することができますgradle run
が、私は使用してjarファイルを実行することはできませんjava -jar
。:私は、このサンプルプロジェクトでエラーを再現しましたGitHubの上のプロジェクトへのリンク
これは、経由でプロジェクトを実行しているから出力され、 gradlew
$ ./gradlew run
> Task :run
Hello world.
BUILD SUCCESSFUL in 4s
これは、プロジェクトを実行しているから出力され、 java -jar
$ ./gradlew build
BUILD SUCCESSFUL in 6s
$ java -jar build/libs/emailer.jar
Error: Could not find or load main class us.company.emailer.App
しかし、私はとき、私が見ることができますunzip
jar
App.class
user@computer:../libs$ unzip emailer.jar
Archive: emailer.jar
creating: META-INF/
inflating: META-INF/MANIFEST.MF
creating: us/
creating: us/company/
creating: us/company/emailer/
inflating: us/company/emailer/App.class
ここです build.gradle
plugins {
id 'groovy'
id 'application'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
compile 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'us.company.emailer.App'
)
}
}
sourceSets.main.java.srcDirs = ['src/main/groovy']
ここです App.groovy
package us.company.emailer
class App {
String getGreeting() {
return 'Hello world.'
}
static void main(String[] args) {
println new App().greeting
}
}
EDIT:追加MANIFEST.MF
@tkruseからのコメントに反応して
Manifest-Version: 1.0
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
Main-Class: us.company.emailer.App
問題は、クラスパスです。あなたが内部を見る場合はMETA-INF/MANIFEST.mf
、ファイル、あなたはそれのセットにを見ることができます:
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
Javaの実行、それはこれらのもののいずれかがあるないアイデアを持っていない場合、それはまたあなたのGroovyのコードを理解するために、グルーヴィーなランタイムが必要です。
これを行う最も簡単な方法は、「にすべてのあなたの依存関係をバンドルすることである脂肪瓶」、とのGradleでこれを行う最も簡単な方法は、優れているシャドウ・ジャーのプラグイン。
あなたに次を追加した場合plugins
におけるブロックbuild.gradle
:
id 'com.github.johnrengelman.shadow' version '5.0.0'
(あなたは削除することができますjar
ブロックとsourceSetsを操作ライン)
そして、実行 ./gradlew shadowJar
あなたはjarファイルを取得します emailer-all.jar
どちらが実行できます。
$ java -jar build/libs/emailer-all.jar
Hello world.
完全を期すため、ここでは完全なbuild.gradleファイルがあります:
plugins {
id 'groovy'
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
implementation 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'