无法运行通过gradle编译的groovy代码构建的jar文件

莱克斯

我试图编译(与gradle产出)和执行(与Java运行时1.8),一个小常规程序(见helloWorld.groovy,下同)。

但是,当我尝试调用它时,出现错误:无法找到或加载主类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'
    )
  }
}
frhd

您的设置有几个问题。

  1. 不会破损,但在这里值得一提:约定指出您的文件名和类应为大写:HelloWorld.groovy

  2. gradle假设您的源文件位于src/main/java或在这种情况下,src/main/groovy您可以根据自己的喜好与它配置的Gradle Groovy插件-项目布局


sourceSets {
    main {
        groovy {
            srcDirs = ['src/groovy']
        }
    }
}

  1. 您需要groovy在jar归档文件中包含所有运行时依赖项。对于这一点,让我们使用使用一种称为扩展任务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');
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过代码运行jar

通过“即时编译”从源代码在Apache下运行.go文件

双击我的用ant构建的jar文件无法运行

通过代码从当前运行的JAR中提取文件

无法使用Gradle和Kotlin运行生成的JAR文件

无法通过在 Windows 7 上双击来运行 .jar 文件

在Java Jre上使用单个jar文件运行groovy未编译脚本

Gradle 2.4-编译后在运行任务中执行Groovy脚本文件

如何从gradle中编译某些groovy文件?

在JAR文件和运行时库路径中包括子项目gradle构建输出

Gradle无法使用Docker依赖构建JAR

Gradle无法编译从域类导入的jar

无法通过Jenkins上的管道作业的jenkinsfile中的Groovy代码(或java代码)创建文件

从 gradle 依赖项构建 jar 文件

无法运行jar文件或Cmd

运行 jar 文件的进程构建器

在Jenkins中运行已编译的Jar文件

用jar文件编译和运行java

如何运行一个文件源代码的Java程序时,通过编译器选项?

无法编译/运行 Rascal 示例代码

构建C / C ++代码时的Gradle编译器输出

无法在 jenkins 中构建一个 groovy jar

运行时代码编译出现错误-进程无法访问文件

编译groovy项目并通过Jenkins运行JUnit测试

有什么办法可以反编译grails / groovy jar文件?

构建小容器以运行已编译的go代码

如何从源代码构建和运行寓言编译器?

Shadow Project Gradle文件无法编译

通过在实际的C / C ++源文件中包括预处理器构建指令的方式来编译C / C ++代码