gpt4 book ai didi

gradle - 为什么我的 Groovy 主类不能从构建的 jar 中执行?

转载 作者:行者123 更新时间:2023-12-01 14:46:02 25 4
gpt4 key购买 nike

我正在尝试使用 Groovy 主类构建可执行 JAR。我可以让 Java 主类完全按预期运行,但找不到 Groovy 等价物并且不会运行。

在 src/main/groovy/foo/Test.groovy 中:

package foo

public class Test { // (Yes, the public keywords here and below are redundant)
public static void main(String[] args) {
println "groovy world"
}
}

在 src/main/groovy/foo/Test2.java 中:

package foo;

public class Test2 {
public static void main(String[] args) {
System.out.println("java world");
}
}

Gradle 文件:

plugins {
id 'java'
id 'groovy'
id 'application'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = 'foo.Test'

repositories {
mavenCentral()
}
dependencies {
compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.7'
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}

我构建了一个 JAR:

$ ./gradlew build

然后尝试运行它(覆盖 list Main-Class):

$  java -cp build/libs/test-groovy-main.jar foo.Test2
java world

$ java -cp build/libs/test-groovy-main.jar foo.Test
Error: Could not find or load main class foo.Test

如果我在执行此操作时打开详细输出,在第二种情况下我会看到“Loaded foo.Test2”,但在第一种情况下看不到“Loaded foo.Test”。

我曾认为 Groovy 源代码编译为纯 java 类,并且确实反编译了 Test.class 文件我可以在 public 中看到一个 public static main(String...) 方法 测试类。我做错了什么?

我在 Ubuntu 16.04 上使用 Gradle 2.6、Java 1.8.0 和 Groovy 2.4.7。

我这里有版本控制中的测试用例:

https://github.com/wu-lee/test-groovy-main

最佳答案

添加 from 部分对我有用:

jar {
manifest {
attributes 'Main-Class': mainClassName
}

from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}

它将 org.codehaus.groovy:groovy-all:2.4.7 依赖项放入您的 jar。

UPD

创建了拉取请求 https://github.com/wu-lee/test-groovy-main/pull/1

关于gradle - 为什么我的 Groovy 主类不能从构建的 jar 中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com