我在Eclipse中有一个Java项目。它工作正常,我可以使用java -jar sample-app.jar
从cmd运行它我现在必须使用Gradle生成可在Linux中使用的可执行sh
文件。
我已经找到了一些创建启动脚本的资源,但我设法做的最多就是使用标准的'startScripts'任务创建一个sample.app.bat文件。
我一直在搜索问题并逐页搜索谷歌试图找到答案,我没有太多运气。我也多次阅读Gradle应用程序插件文档,但仍然很困惑。
如何编写Gradle任务来生成sh
文件以执行我的sample-app.jar文件?
注意: sample-app.bat文件没有执行。它只生成一个“错误:无法找到或加载主类com.sample.MainClass
答案 0 :(得分:2)
似乎提到的application插件正是您所寻找的。 Here你可以找到一个小小的演示。现在要运行主类,您需要运行gradle run
。要准备 sh 和 bat 脚本,请运行gradle gradle startScripts
。要准备可运行(且易于复制)的应用程序版本并启动脚本,请运行gradle distZip
或gradle distTar
。这两个任务都将准备和归档,可以提取到给定目录并使用准备好的脚本运行。最后一个任务gradle installDist
将在给定目录中准备脚本和可执行jar,但不打包它们。
使用dist*
,installDist
和startScripts
创建的所有工件都可以在build
目录下找到。尝试运行:
gradle clean distZip distTar installDist
然后tree -a build
查看所有准备好的文件。
要从准备好的jar运行主类,请记住在正确的目录中执行shell脚本,例如:build/install/lol/bin
。
答案 1 :(得分:1)
有一种标准的Gradle方式如何做到这一点。您必须通过
开始gradle.build
apply plugin: 'application'
之后,您可以启动distTar
,distZip
和installZip
任务。 (它们位于distribution
任务文件夹中)。他们每个人都在你的项目中创建build/scripts
文件夹,并将windows和Linux脚本放在那里。此外,他们创建tar / zip /文件夹安装 - 查看distribution
插件。
注意,您不需要应用distribution
插件 - 它已经在'application'插件中。 startScripts
插件位于distribution
插件中。
但情况并不是那么好。第二个问题是生成的脚本很糟糕。至少适用于Windows。因此,您必须手动编辑它们,或者在startScripts
中插入的脚本中自动执行该过程。它看起来如此:
startScripts {
doLast {
your script editing lines here.
}
}