如何从命令行运行 Java Gradle 项目中的 main 方法?

aCa*_*lla 4 java command-line exception main-method gradle

我有一个 Gradle 项目(例如,MyProject),它有一个 main 方法,我只想用它来运行一个小型 Java 应用程序。比如说,脚本位于一个类和包中,如下所示:

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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我用 构建项目$ ./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
Run Code Online (Sandbox Code Playgroud)

该脚本不是应用程序的主要部分,但我只是希望它偶尔运行一次,并且我想弄清楚如何通过命令行运行它。有没有办法在不导入更多库的情况下做到这一点?我见过用一罐子完成的工作,但我想我可以不用一罐子也能做到这一点。

更新:

阅读本文后尝试添加类路径,但现在我收到了不同的错误:

$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
Run Code Online (Sandbox Code Playgroud)

Jol*_*lta 5

您可以在Gradle 文档中了解如何执行此操作。

apply plugin: 'application'
mainClassName = "com.mycompany.myapplication.MyScript"
applicationDefaultJvmArgs = [
    "-Djava.util.logging.config.file=src/main/resources/logging.properties"
]
Run Code Online (Sandbox Code Playgroud)

然后只需使用即可gradlew run运行您的应用程序。

作为一个额外的好处,该插件可以帮助您打包应用程序以进行分发。使用gradle distZip该命令即可。