Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 为什么赢了';我的Groovy主类不是从构建的jar执行的吗?_Gradle_Groovy_Jar - Fatal编程技术网

Gradle 为什么赢了';我的Groovy主类不是从构建的jar执行的吗?

Gradle 为什么赢了';我的Groovy主类不是从构建的jar执行的吗?,gradle,groovy,jar,Gradle,Groovy,Jar,我试图用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) { pri

我试图用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");
    }
}
渐变文件:

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
    }
}
我建造了一个罐子:

$ ./gradlew build
并尝试运行它(覆盖清单主类):

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

我原以为Groovy源代码可以编译成普通的java类,实际上,在反编译Test.class文件时,我可以在
public
测试类中看到
public static main(String…
方法。我做错了什么

我正在Ubuntu 16.04上使用Gradle2.6、Java1.8.0和Groovy2.4.7

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

添加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


创建了一个拉请求

您仍然需要groovy运行时jar。您可以使用shadow插件捆绑jar和依赖项(即:groovy)。如果没有其他人跳过,我会在几个小时内给出一个示例/答案!我错过了一些东西:在我的其他项目中,我已经删除了一些额外的复杂性,但其中包括一个动态构建的依赖于平台的胖jar任务,改编自shadow插件,这太棒了,不要走Uber-jar路线在这个问题上,我要回答我自己的问题,但是,为我做这件事给某人打勾会更好:)。在简单的情况下有效,但是请注意,我在uberjars上找到的答案是,在使用签名JAR尝试这种方法时,需要从META_INF目录中排除.SF、.RSA和.DSA文件扩展名,否则会遇到以下问题:
jar {
    manifest {
        attributes 'Main-Class': mainClassName
    }

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