【发布时间】:2019-12-04 20:29:05
【问题描述】:
我有一个 Gradle 项目(例如,MyProject),它有一个我只想用来运行小型 Java 应用程序的 main 方法。比如说,脚本在一个类和包中,如下所示:
MyScript.Java
package com.car.ant;
import com.3rdparty.library.LibraryException;
public class MyScript {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
我用$ ./gradlew clean build 构建项目,没问题。我正在尝试通过命令行运行它,但是当我这样做时,尝试运行时出现异常:
$ pwd
~/workspace/MyProject/build/classes/java/main
$ java com.car.ant.MyScript
Exception in thread "main" java.lang.NoClassDefFoundError: com/3rdparty/library/exception/LibraryException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
... 7 more
这个脚本不是应用程序的主要部分,但我只是希望它在其中每隔一段时间运行一次,我想弄清楚如何通过命令行自行运行它。有没有办法在不导入库的情况下做到这一点?我见过用一个罐子做的,但我想我可以不用一个罐子。
更新:
在阅读this 后尝试添加类路径,但现在我得到了一个不同的错误:
$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
【问题讨论】:
-
如果你使用 gradle 我会推荐
application插件,你所要做的就是指定完全限定的主类名。它还处理您的所有库,因此您不必指定类路径。 -
您对
script一词的使用相当令人困惑,因为您尝试运行的程序似乎是Java 程序。这些通常不称为脚本。脚本通常是指用“脚本”语言编写的程序,例如 shell、groovy 或 python。
标签: java exception gradle command-line main-method