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