我正在编写一个简单的Gradle任务来在build.gradle文件中启动java应用程序 . 当我尝试使用 --info
标志运行任务时,它会输出java命令,如下所示:
<JAVA_HOME>/bin/java -Xmx256M
-cp <ABSOLUTE_PATH_TO_ALL_LIBS>/launcherLib/launcherLib.jar:
<ABSOLUTE_PATH_TO_ALL_LIBS>/lib1/lib1.jar
com.hungryTux.launcher.LauncherClass 'launcherArg'
Gradle然后抱怨无法加载或找到主类 . 我知道 com.hungryTux.launcher.LauncherClass
类存在于类路径中指定的 launcherLib
jar文件中,并且其中包含 main
方法 . 确切的错误消息是 Error: Could not find or load main class
.
更有趣的是,如果我从Gradle任务的输出中获取此命令并尝试直接在终端上运行它,它似乎找到主类并正确启动应用程序 .
此Gradle任务的工作目录是包含 build.gradle
文件的项目的根目录 . 当我尝试手动运行命令时,我从同一目录中执行此操作 .
我觉得我对JavaExec任务的工作方式缺少了一些明显的东西 . 我已经阅读了它的文档,但没有什么真的响了 .
我应该指出 com.hungryTux.launcher.LauncherClass
类未被指定为 launcherLib.jar
文件中包含的 META-INF/MANIFEST.MF
文件中的 Main-Class
. 这可能是个问题吗?如果是这样,从命令行运行时这是如何工作的?
1 回答
这最终成为我传递给JavaExec的jvmArgs之一的解析问题 . 摆脱令人讨厌的争论让事情变得有效 .