首页 文章

使用groovy脚本创建可执行jar

提问于
浏览
5

我有一个groovy脚本 Automate.groovy . 该脚本没有类定义或主方法 . 我正在寻找创建包含脚本的jar的最简单方法 . 我尝试使用以下命令编译groovy脚本:

groovyc Automate.groovy

我还有一个Manifest文件manifest-addition.txt,它指定了主类

Main-Class: Automate

我使用命令创建了jar:

jar cvfm Automate.jar mainfest-addition.txt *.class

这给了我一个带有Automate.class和Automate $ 1.class的jar和一个带有Main类的Manifest文件 . 但是当我尝试使用 java -jar Automate.jar 运行jar时,我总是得到错误

cannot find or load main class Automate.

我在这做错了什么?

应该有这样一个简单的方法来创建jar . 我只需要在我的jar中使用这个脚本文件,我不想使用maven / ant / gradle来完成这项工作 . 有没有一种简单明了的方法呢?

2 回答

  • 8

    类文件依赖于Groovy . 使用可嵌入的jar将解决问题 .

    使用Groovy 2.4.5,如果我有Automate.groovy的脚本

    println "Hello from Automate.groovy"
    

    并使用此manifest.txt:

    Main-class: Automate
    Class-path: jar/groovy-all-2.4.5.jar
    

    这个简单的构建脚本:

    rm *.class
    groovyc Automate.groovy
    jar cvfm Automate.jar manifest.txt Automate.class
    

    并且,在运行目录中,我执行此操作:

    bash$ mkdir jar
    bash$ cp $GROOVY_HOME/embeddable/groovy-all-2.4.5.jar jar
    

    然后这工作:

    bash$ java -jar Automate.jar 
    Hello from Automate.groovy
    

    如果可嵌入的jar包含在Automate.jar本身中,解决方案会更好 . 使用Gradle的一个例子是this project .

  • -1

    实际问题是我脚本中的@Grab Annotation . 我创建了一个Gradle项目并添加了一个非常简单的脚本HelloWorld.groovy,只有一个println语句,但也使用@Grab来导入一些东西 . 当我构建jar时,它找不到主类 . 当我用Google搜索时,我发现@Grab注释用于独立脚本,而不是用于预编译脚本 . 因此,如果您需要在编译的groovy中使用@Grab,那么您需要添加额外的ivy依赖项或选择不使用@Grab并使用其他方式来包含依赖项 . 我从我的脚本中删除了@Grab然后构建它 . jar 然后执行得很好 .

    抱歉btw偏离了我不想使用Gradle / Maven的事实 . 我几乎花了两天时间尝试在stackoverflow和google上找到的所有东西,最后尝试了Gradle . 我不确定这是否是问题的唯一解决方案,但这对我有用 .

相关问题