groovy - 编译Groovy类

标签 groovy gradle

我试图编译gradle附带的groovy quickstart示例(在samples / groovy / quickstart目录中)。 gradle compileGroovygradle jar都成功完成,但是我无法运行其中任何一个:

c:\tmp\quickstart\build\classes\main\org\gradle>java Person
Exception in thread "main" java.lang.NoClassDefFoundError: Person (wrong name: org/gradle/Person)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Person.  Program will exit.


c:\tmp\quickstart\build\libs>java -jar quickstart.jar
Failed to load Main-Class manifest attribute from
quickstart.jar

然后我将manifest属性添加到bulid.gradle:
jar {
    manifest {
        attributes("Main-Class": "org.gradle.Person")
    }
}

现在得到:
c:\tmp\quickstart\build\libs>java -jar quickstart.jar
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 12 more
Could not find the main class: org.gradle.Person. Program will exit.

如何运行创建的jar? (或者我错过了重点吗?)

最佳答案

Gradle发行版中的groovy/quickstart示例并不旨在直接执行。除其他事项外,Person类没有main方法。认为它是一个图书馆。

关于groovy - 编译Groovy类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996514/

相关文章:

groovy - 使用Gradle运行Spock/Geb测试时出现MissingMethodException错误

Groovy 子类调用访问闭包的父类(super class)方法

android - gradle 执行过程错误流

groovy - 如何使任务调用主类

java - Gradle取决于非Gradle项目

grails - 服务类的build.gradle中的Grails访问变量

java - 使用 Gradle 的 IntelliJ 插件提供 java.lang.NoClassDefFoundError

grails - 使用 Grails 进行长轮询

java - gradle - 最小化 processResources 中的 json 资源

android gradle 错误 : libraries must use the exact same version specification. 找到版本 28.0.0