【发布时间】:2014-05-19 14:57:57
【问题描述】:
我目前正在编写我的第一个 Gradle 构建脚本,以帮助构建一个简单的 Java 应用程序,以便从命令行使用。
下面是完整的 build.gradle 代码
apply plugin: 'java'
apply plugin: 'eclipse'
defaultTasks 'clean', 'build'
repositories {
mavenCentral()
}
jar {
baseName = 'napier-deploy'
version = '1'
manifest {attributes 'Main-Class': 'com.Main'}
}
dependencies {
compile 'org.apache.httpcomponents:fluent-hc:4.3.3'
compile 'org.apache.httpcomponents:httpclient-cache:4.3.3'
compile 'org.apache.httpcomponents:httpcore:4.1'
compile 'org.apache.httpcomponents:httpmime:4.3.3'
compile 'org.apache.httpcomponents:httpclient:4.3.3'
testCompile 'junit:junit:4.11'
testCompile 'org.mockito:mockito-all:1.9.5'
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
运行 gradle assemble --info 命令显示从 Maven 下载的依赖项,但是当我尝试从命令行启动 Jar 时出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity
at com.Main.main(Main.java:17)
Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
HttpEntity 包含在 httpcomponents.httpcore 人工制品中,所以我不明白为什么 JVM 找不到类。
感谢任何 cmets。
【问题讨论】:
-
听起来您在没有 Gradle 帮助的情况下启动应用程序,也没有提供类路径 (
-cp)。 -
生成的 jar 只包含你的类和你的类,而不是所有的依赖项。你需要一个插件,比如 gradle-fatjar-plugin
-
谢谢大家,将添加一个 fatjar 任务
标签: java maven gradle dependency-management build.gradle