无法运行jar文件,使用gradle编译的groovy代码构建

时间:2016-11-06 11:38:20

标签: gradle groovy executable-jar

我正在尝试编译(使用gradle)并执行(使用java 1.8运行时)一个小的groovy程序(请参阅下面的 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'
    )
  }
}

1 个答案:

答案 0 :(得分:1)

您的设置存在一些问题。

  1. 没有破坏,但值得一提的是:Convention声明你的文件名和类应该是大写的: HelloWorld.groovy

  2. gradle假设您的源文件位于src/main/javasrc/main/groovy下。您可以根据自己的偏好使用gradle groovy plugin - project layout

  3. 对其进行配置
    sourceSets {
        main {
            groovy {
                srcDirs = ['src/groovy']
            }
        }
    }
    
    1. 您需要在jar-archive中包含groovy的所有运行时依赖项。为此,我们使用名为uberjar的扩展任务。
    2. <强>的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');
         }
      }