我正在学习Java的“艰难之路”,意思是没有任何IDE。相反,我依赖gradle和我的文本编辑器。现在,我的项目看起来是这样的:
├── build.gradle
└── src
├── main
│ └── java
│ └── CliOptionsTryout.javaBuild.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我知道原因是它找不到公用图书馆。所以,问题是,我如何告诉gradle下载并安装这个库?
发布于 2017-04-19 18:53:11
由于您可以读取堆栈跟踪中的内容,所以Java可执行文件无法找到类org.apache.commons.cli.Options。这个类是您正在使用的依赖项的一部分。
在执行java CliOptionsTryout时,Java可执行文件查找二进制文件(当前文件夹中的.class文件)。您会得到一个错误,因为Gradle不会在CliOptionsTryout.class文件所在的文件夹中获取依赖项(JAR文件)。
如果您想成功地运行您的类,您需要告诉Java可执行文件在哪里找到包含您正在使用的库中的.class文件的JAR文件。
默认情况下,Gradle获取$HOME/.gradle/...中的所有JAR依赖项。您缺少的依赖项是版本1.4中的。下面是定位精确路径的命令:
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文件的路径,就可以使用java命令和-cp选项扩展类路径。类路径用于判断何处可以找到第三方二进制文件:
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直接执行该文件。如果你有兴趣学习如何做,请看看分级应用插件。
https://stackoverflow.com/questions/43503435
复制相似问题