jar中不包含Gradle依赖项

时间:2014-02-15 21:24:24

标签: java gradle build.gradle

我是Gradle的新手,也是我使用它的主要原因,因为我需要为我编译的jar解决依赖问题。

这是我的build.gradle文件:

apply plugin: 'java'
apply plugin: 'eclipse'

version = '0.9'

jar {
    manifest {
      attributes 'Main-Class': 'wd.nlp.FileImport', 'Implementation-Title': 'WD\
NLP', 'Implementation-Version': version
    }
}

repositories {
    flatDir(dirs: 'lib')
}

dependencies{
    compile 'mallet:mallet:2.0.7'
}

我的Java文件都依赖于名为Mallet的第三方库。这是我的文件夹结构:

 |---1.10
 |-----taskArtifacts
 |-build
 |---classes
 |-----main
 |-------wd
 |---------nlp
 |---dependency-cache
 |---libs
 |---tmp
 |-----jar
 |-lib
 |-src
 |---main
 |-----java
 |-------wd
 |---------nlp
 |-----resources

我将Mallet-2.0.7.jar放在顶部文件夹下的lib内。然后我使用gradle build命令并尝试运行我的类:

java -classpath build/libs/JavaClassifier-0.9.jar wd.nlp.FileImport -train ...

然后我被告知:

Exception in thread "main" java.lang.NoClassDefFoundError: cc/mallet/pipe/Pipe
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)

Mallet图书馆的路径是cc.mallet.* ...现在我不知道该怎么办...请帮忙!

1 个答案:

答案 0 :(得分:3)

不包括依赖项,因为您没有创建项目的分布。在Maven中,它被称为集合。

如果您直接从命令行调用您的应用程序,则不是Gradle的问题。

无论如何,有一个Gradle插件可以创建一个发行版并添加shell脚本来执行你的应用程序。

因此,当您将以下行添加到gradle脚本时。

apply plugin: 'application'

您将获得一些新任务来创建分发。