我正在“艰难地”学习 Java,这意味着没有任何 IDE。相反,我依赖 gradle 和我的文本编辑器。此时,我的项目如下所示:
├── build.gradle
└── src
├── main
│ └── java
│ └── CliOptionsTryout.java
build.gradle 的内容:
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
compile 'commons-cli:commons-cli:1.4'
compile 'org.slf4j:slf4j-api:1.7.22'
testCompile 'junit:junit:4.12'
}
CliOptionsTryout.java 的内容:
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class CliOptionsTryout {
public static void main(String[] args) {
Options options = new Options(); // <=== FAILED HERE
options.addOption("h", "help", false, "show help.");
options.addOption("v", "var", true, "Here you can set parameter .");
}
}
使用gradle build
成功构建了项目,但是当我执行java CliOptionsTryout -v 100
时,出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/Options
at CliOptionsTryout.main(CliOptionsTryout.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.Options
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
我知道原因是找不到 commons-cli 库。那么,问题是,如何告诉 gradle 下载并安装这个库?
最佳答案
正如您在堆栈跟踪中可以看到的那样,Java 可执行文件找不到类 org.apache.commons.cli.Options
。此类是您正在使用的依赖项的一部分。
当您执行java CliOptionsTryout
时,Java可执行文件会查找二进制文件(当前文件夹中的.class文件)。您会收到错误消息,因为 Gradle 未在 CliOptionsTryout.class
文件所在的文件夹中获取依赖项(JAR 文件)。
如果您想成功运行您的类,您需要告诉 Java 可执行文件在哪里可以找到包含您正在使用的库的 .class
文件的 JAR 文件。
默认情况下,Gradle 会获取 $HOME/.gradle/...
中的所有 JAR 依赖项。您缺少的依赖项是版本 1.4 中的 Apache commons CLI。以下是定位确切路径的命令:
find $HOME/.gradle -name "commons-cli-1.4.jar"
例如,我得到以下信息:
$HOME/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.4/c51c00206bb913cd8612b24abd9fa98ae89719b1/commons-cli-1.4.jar
一旦获得依赖 JAR 文件的路径,就可以使用带有 -cp
选项的 java
命令来扩展类路径。类路径用于告诉在哪里可以找到第三方二进制文件:
java -cp $HOME/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.4/c51c00206bb913cd8612b24abd9fa98ae89719b1/commons-cli-1.4.jar:. CliOptionsTryout
在现实世界中,我建议为您的应用生成一个 JAR 文件(包括所有依赖项)并使用 java -jar
直接执行此文件。如果您有兴趣学习如何做,请查看Gradle application plugin 。
关于java - 如何让gradle下载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503435/