首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让gradle下载库

如何让gradle下载库
EN

Stack Overflow用户
提问于 2017-04-19 18:26:45
回答 1查看 2.6K关注 0票数 0

我正在学习Java的“艰难之路”,意思是没有任何IDE。相反,我依赖gradle和我的文本编辑器。现在,我的项目看起来是这样的:

代码语言:javascript
复制
├── build.gradle
└── src
    ├── main
    │   └── java
    │       └── CliOptionsTryout.java

Build.gradle的内容:

代码语言:javascript
复制
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的内容:

代码语言:javascript
复制
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时,我得到以下错误:

代码语言:javascript
复制
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下载并安装这个库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中的。下面是定位精确路径的命令:

代码语言:javascript
复制
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选项扩展类路径。类路径用于判断何处可以找到第三方二进制文件:

代码语言:javascript
复制
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直接执行该文件。如果你有兴趣学习如何做,请看看分级应用插件

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43503435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档