Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 maven jar项目打包到jar后如何工作?_Java_Maven_Dependencies - Fatal编程技术网

Java maven jar项目打包到jar后如何工作?

Java maven jar项目打包到jar后如何工作?,java,maven,dependencies,Java,Maven,Dependencies,我是马文的新手。我已经创建了一个maven项目,它将被打包到JAR中。我清理了包,然后创建了jar。当我提取同一个jar时,在打包的jar中看不到我在pom.xml中添加的任何依赖项(jar)。如果我将这个jar提供给第三方客户机,那么在没有任何依赖jar的情况下,代码将如何工作?请告诉我maven是如何管理罐子的 谢谢 Maven根据您如何配置依赖插件来处理依赖项 有关如何执行此操作的简单示例,请参见 在本例中,以下代码配置依赖项的终止位置: <plugin> <gr

我是马文的新手。我已经创建了一个maven项目,它将被打包到JAR中。我清理了包,然后创建了jar。当我提取同一个jar时,在打包的jar中看不到我在pom.xml中添加的任何依赖项(jar)。如果我将这个jar提供给第三方客户机,那么在没有任何依赖jar的情况下,代码将如何工作?请告诉我maven是如何管理罐子的


谢谢

Maven根据您如何配置依赖插件来处理依赖项

有关如何执行此操作的简单示例,请参见

在本例中,以下代码配置依赖项的终止位置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <includeGroupIds>log4j</includeGroupIds>
                <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins


如果您想尝试以这种方式向用户提供文件,您可以分发jar和POM文件,但他们需要能够访问保存这些依赖项的Maven存储库。

Core Maven无法处理此问题。Maven是一个构建工具,它的工作是构建一个工件(在您的例子中是一个jar)。编译代码需要在模块的pom.xml文件中定义依赖项。您将需要maven插件来实现这一点

现在,您问的不是构建,而是编译后的二进制文件的发行版

如果我理解的话,应该有很多JAR(您和您的依赖项)。或者,您可以将代码作为jar+依赖项分发到内部

例如:

第一种情况:

如果您的代码驻留在模块A中(比如说,代码在包org.A.*),并且依赖于第三方(比如,log4j,其类驻留在org.apache.log4j中),那么您可以预期jar将只包含模块A的类,并且您预期log4j将由模块的用户自动添加(第一种情况)

第二种情况:

模块a.jar将同时包含org.a.*和org.apache.log4j.*类,所有内容都在同一个模块中

一般来说,第一种方法更“健康”,在这种情况下,您不应该在maven中做任何事情。也许您的分发工具/文档应该包含此信息。 如果有人在他/她的代码中像第三方一样使用模块a(如果你开发了一个框架或其他东西),如果他/她的项目是mavenized的,那么你在log4j上定义了一个依赖项这一事实将使maven下载log4j以及你的a.jar(在maven符号中,这称为“传递依赖项”)

如果您对第二种情况感兴趣(如果您定义了一些“客户机应用程序”,例如“针对某个服务器的jndi客户机”,那么这可能是相关的),您可能想看看

注意这可能导致依赖性地狱(如果使用客户机的应用程序也使用log4j怎么办?如果log4j-s的版本不同怎么办)/

总之,您可能想要第一种方法,在决定第二种方法之前请三思:)

还有一个提示,如果您只想下载模块“a”的所有依赖项,您可能需要使用maven dependency plugin-在命令提示符下键入以下命令

 mvn dependency:copy-dependencies
您将在target/dependencies文件夹中找到所有依赖项


希望这对Maving有所帮助和帮助

解决此问题的最简单方法是使用,它可以创建具有以下依赖项的jar:



可能重复:Ryan,我不是问如何创建可执行jar文件。当我打包时,jar中没有任何依赖项。我只是问maven是怎么管理他们的?你去链接了吗?它特别回答了如何制作一个罐子,你可以给别人,你的依赖关系。Maven通过在打包时将它们放在“依赖项”文件夹中来管理它们(可以在插件中重写),然后你负责找出如何分发它们。这可能会让人明白:打包时,我看不到任何依赖项文件夹?依赖项:复制不是正确的方式,通过maven assembly插件更好地使用所描述的方法。除此之外,如果您喜欢在Maven中编译代码,这也由插件(Maven编译器插件)处理。创建jar文件也由插件(Maven jar插件)等处理。Maven本身是一个调用插件等的IoC容器。
 mvn dependency:copy-dependencies