不能 运行 一个 jar 文件,从 groovy 编译的代码构建 gradle
Can't run a jar-file, built from groovy-code compiled with gradle
我正在尝试编译(使用 gradle)并执行(使用 java 1.8 运行时)一个小的 groovy 程序(参见 helloWorld.groovy, 下面).
但是当我尝试调用它时,我得到 错误:无法找到或加载 main class helloWorld
我错过了什么?
编译:
lexu> gradle clean jar
:clean
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
BUILD SUCCESSFUL
Total time: 0.555 secs
执行:
lexu> java -jar ./build/libs/helloWorld.jar
Error: Could not find or load main class helloWorld
helloWorld.groovy:
class helloWorld {
static void main(String[] args) {
println('Hello World');
}
}
build.gradle:
apply plugin: 'groovy'
apply plugin: 'application'
mainClassName = "helloWorld"
archivesBaseName = 'helloWorld';
configurations {provided; inlib;}
repositories {mavenCentral()}
dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'}
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'helloWorld'
)
}
}
您的设置存在一些问题。
没有破坏,但在这里值得一提:Convention 说明你的文件名,类 应该是大写的:HelloWorld.groovy
gradle
假定您的源文件位于 src/main/java
下,或者在本例中为 src/main/groovy
。您可以根据自己的喜好配置 gradle groovy plugin - project layout:
sourceSets {
main {
groovy {
srcDirs = ['src/groovy']
}
}
}
- 您需要在 jar 存档中包含
groovy
的所有运行时依赖项。为此,让我们使用名为 uberjar
. 的扩展任务
build.gradle:
apply plugin: 'groovy'
apply plugin: 'application'
mainClassName = "HelloWorld"
archivesBaseName = 'HelloWorld';
configurations {provided; inlib;}
repositories {mavenCentral()}
dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'}
task uberjar(type: Jar,dependsOn:[':compileJava',':compileGroovy']) {
from files(sourceSets.main.output.classesDir)
from configurations.runtime.asFileTree.files.collect { zipTree(it) }
manifest {
attributes 'Main-Class': mainClassName
}
}
HelloWorld.groovy:
class HelloWorld {
static void main(String[] args) {
println('Hello World');
}
}
我正在尝试编译(使用 gradle)并执行(使用 java 1.8 运行时)一个小的 groovy 程序(参见 helloWorld.groovy, 下面).
但是当我尝试调用它时,我得到 错误:无法找到或加载 main class helloWorld
我错过了什么?
编译:
lexu> gradle clean jar
:clean
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
BUILD SUCCESSFUL
Total time: 0.555 secs
执行:
lexu> java -jar ./build/libs/helloWorld.jar
Error: Could not find or load main class helloWorld
helloWorld.groovy:
class helloWorld {
static void main(String[] args) {
println('Hello World');
}
}
build.gradle:
apply plugin: 'groovy'
apply plugin: 'application'
mainClassName = "helloWorld"
archivesBaseName = 'helloWorld';
configurations {provided; inlib;}
repositories {mavenCentral()}
dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'}
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'helloWorld'
)
}
}
您的设置存在一些问题。
没有破坏,但在这里值得一提:Convention 说明你的文件名,类 应该是大写的:HelloWorld.groovy
gradle
假定您的源文件位于src/main/java
下,或者在本例中为src/main/groovy
。您可以根据自己的喜好配置 gradle groovy plugin - project layout:
sourceSets {
main {
groovy {
srcDirs = ['src/groovy']
}
}
}
- 您需要在 jar 存档中包含
groovy
的所有运行时依赖项。为此,让我们使用名为uberjar
. 的扩展任务
build.gradle:
apply plugin: 'groovy'
apply plugin: 'application'
mainClassName = "HelloWorld"
archivesBaseName = 'HelloWorld';
configurations {provided; inlib;}
repositories {mavenCentral()}
dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'}
task uberjar(type: Jar,dependsOn:[':compileJava',':compileGroovy']) {
from files(sourceSets.main.output.classesDir)
from configurations.runtime.asFileTree.files.collect { zipTree(it) }
manifest {
attributes 'Main-Class': mainClassName
}
}
HelloWorld.groovy:
class HelloWorld {
static void main(String[] args) {
println('Hello World');
}
}