Java 如何创建具有依赖关系的可运行jar
这是我第一次用Gradle2.3做实验,看起来应该很简单,我忽略了一些明显的东西,但我想不出来。文档中没有任何东西让我吃惊,我在谷歌上搜索过一些东西,但都没有任何区别 我有一个简单的项目,它向MongoDB数据库写入数据,然后从中读取一些信息。它工作得很好;我可以执行它:Java 如何创建具有依赖关系的可运行jar,java,gradle,Java,Gradle,这是我第一次用Gradle2.3做实验,看起来应该很简单,我忽略了一些明显的东西,但我想不出来。文档中没有任何东西让我吃惊,我在谷歌上搜索过一些东西,但都没有任何区别 我有一个简单的项目,它向MongoDB数据库写入数据,然后从中读取一些信息。它工作得很好;我可以执行它: 通过命令行上的gradle run 月蚀月神 通过Eclipse生成的jar文件,我可以通过java命令运行该文件 然而,我无法从Gradle本身生成一个可运行的jar文件。我的build.gradle文件包括: appl
- 通过命令行上的
gradle run
- 月蚀月神
- 通过Eclipse生成的jar文件,我可以通过
命令运行该文件java
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.poldie.quicktest.HelloWorld'
jar {
manifest {
attributes 'Main-Class': 'com.poldie.quicktest.HelloWorld'
}
baseName = 'my-handy-jar'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.springframework.data:spring-data-mongodb:1.7.0.RELEASE'
}
当我检查my-handy.jar.jar时,我看到:
$ jar tf my-handy-jar.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/poldie/
com/poldie/quicktest/
com/poldie/quicktest/Person.class
com/poldie/quicktest/HelloWorld.class
试着运行它会让我:
$ java -jar my-handy-jar.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/data/mongodb/core/MongoOperations
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.springframework.data.mongodb.core.MongoOperations
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)
... 7 more
显然,Eclipse生成的jar文件要大得多,包含依赖项,并且可以正常工作。我如何通过Gradle实现这一点
(在我添加MongoDB依赖项之前,使用
gradle build
在我的项目的更简单版本上创建jar)您需要在清单中添加一个类路径条目,列出这个jar依赖的jar,作为相对于这个.jar文件位置的相对URL。通常,其他.jar文件将位于同一目录或lib/子目录中。1)了解spring data mongodb代表的所有.jar文件的最佳方式是什么。我可以使用Eclipse生成的jar;有更好的办法吗?2) Gradle会在某个时候为我下载它们——或者可能是在我将Spring工具套件安装到Eclipse中时下载的——所以我不确定它们在哪里。对此我无能为力。我对格雷德尔一无所知。好吧,你帮我完成了我的任务,所以还是谢谢你!在用户目录中查找C:\Users\\\.gradle\caches\modules-2\files-2.1
中的文件。我使用的是LibGDX
,它有一个基于Gradle的设置,这就是我的一切。@CoderMusgrove我使用的是linux,但我可以在相应的位置看到一些文件(一个jar、sources.jar和一个.pom)。我注意到我在build/distributions文件夹中得到了一个包含jar的.tar文件,因此我将它们复制到了其他地方,目前正试图将它们包含在类路径中,尽管没有成功。我现在做的是不是很不寻常?Gradle为什么不直接创建一个runnable.jar呢?