Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建具有依赖关系的可运行jar_Java_Gradle - Fatal编程技术网

Java 如何创建具有依赖关系的可运行jar

Java 如何创建具有依赖关系的可运行jar,java,gradle,Java,Gradle,这是我第一次用Gradle2.3做实验,看起来应该很简单,我忽略了一些明显的东西,但我想不出来。文档中没有任何东西让我吃惊,我在谷歌上搜索过一些东西,但都没有任何区别 我有一个简单的项目,它向MongoDB数据库写入数据,然后从中读取一些信息。它工作得很好;我可以执行它: 通过命令行上的gradle run 月蚀月神 通过Eclipse生成的jar文件,我可以通过java命令运行该文件 然而,我无法从Gradle本身生成一个可运行的jar文件。我的build.gradle文件包括: appl

这是我第一次用Gradle2.3做实验,看起来应该很简单,我忽略了一些明显的东西,但我想不出来。文档中没有任何东西让我吃惊,我在谷歌上搜索过一些东西,但都没有任何区别

我有一个简单的项目,它向MongoDB数据库写入数据,然后从中读取一些信息。它工作得很好;我可以执行它:

  • 通过命令行上的
    gradle run
  • 月蚀月神
  • 通过Eclipse生成的jar文件,我可以通过
    java
    命令运行该文件
然而,我无法从Gradle本身生成一个可运行的jar文件。我的build.gradle文件包括:

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呢?