Maven依赖管理的jar文件在打包后可部署文件中的位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven依赖管理的jar文件在打包后可部署文件中的位置?相关的知识,希望对你有一定的参考价值。

初学Maven,觉得依赖管理很方便实用,但是有一点不太明白。
以web项目为例,以往传统的java web项目引用到的jar包,比如spring、struts2等,都是放到WEB-INF的lib目录下,发布到server例如tomcat之后可以到lib目录找到;那么使用maven之后,maven把我需要用到的jar安装在本地仓库.m2目录里面了,通过pom.xml来管理,但是开发完成之后,打包成应用部署到Server去之后,我用到的这些jar在应用中的什么地方呢?我需要到什么地方去找?难道Server所在计算机上也必需要安装maven?

参考技术A 打包后jar包就都在lib目录下了,使用maven的也在。本回答被提问者采纳 参考技术B 使用maven-assembly-plugin,配合assembly.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<attach>false</attach>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>jp.co.nec.nhm.df.entrance.Entrance</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>

jars和其他文件的maven打包

【中文标题】jars和其他文件的maven打包【英文标题】:Maven packaging of jars and other files 【发布时间】:2012-01-10 15:24:33 【问题描述】:

我是 maven 新手,并且有一个具有一些依赖项的项目。现在 Maven 应该创建一个包含所有 /src/main/java 文件的 jar 文件并将它们放入目录 A 中。我想在构建过程中实现这些东西:

将所有依赖jar放入一个文件夹B 将项目中的一些其他文件放入C。 那我需要 gzippedzipped 设置一些gzip中设置的执行权限, 最后推送这两个档案到某个网络驱动器上。

我已经与 ANT 一起工作,但我想对 Maven 做一个干净的端口,而不是调用大的 ANT 文件。

有人能指出我正确的方向吗?我应该使用哪些插件?

【问题讨论】:

【参考方案1】:

首先,看看 Maven 程序集插件。它可能会满足您的所有需求。我已经使用了它,但只是一点点,所以我可以向您指出您可能需要的信息。

您为此插件创建名为 Assembly Descriptor 的 XML 配置文件,以指导其操作。

插件页面上有一些预定义的可用。 http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html 至少有 zip 中的源代码会帮助你。

程序集描述位于http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html。

您可以在dependencySets 中复制依赖项。 在fileSet中,您可以定义文件权限。 对于GZipping你可以看这个话题Creating a tar.gz archive with Maven 如果 Assembly 插件无法处理共享驱动器上的复制,请查看 maven-copy-plugin。

如果 Maven Assembly 插件无法处理您需要的所有内容,您可以使用: - Maven Copy Plugin - http://evgeny-goldin.com/wiki/Maven-copy-plugin 复制源文件 - Maven 依赖插件 -http://maven.apache.org/plugins/maven-dependency-plugin/ 用于复制所有依赖 JAR(插件的目标复制依赖) - Maven 资源插件http://maven.apache.org/plugins/maven-resources-plugin/ - 如果你需要复制资源。

【讨论】:

【参考方案2】:

我不确定我是否了解您的所有要求。

Maven 可以自行或通过插件执行以下操作:

0/ "mvn compile" 将编译你的源文件夹下的java文件,src/main/java是默认文件夹,并将它们复制到target/classes中

1/“mvn package”会根据你的包装压缩一个 jar 或 war

2/ maven资源插件可以做文件操作

3/ maven组装插件可以存档资源

4/ "mvn install" 将打包好的 jar 安装到本地 maven 仓库中

5/ "mvn deploy" 将打包好的 jar 部署到远程 maven 仓库中,如果你有权限

在使用 Maven 时,将文件复制到其他项目中并不是一个明智的做法。在 Project C pom.xml 中添加 maven 依赖更加 maven 风格。

【讨论】:

这很好。与 Ant 不同,Maven 对项目和预定义的生命周期有一些假设。它无需太多配置即可处理许多开箱即用的操作。例如。对于编译,你不需要告诉它在哪里寻找源文件。它使用其项目结构,例如src/main/java 用于 java 源文件和 src/main/resources 用于应用程序资源。您可以通过阅读有关 Maven 生命周期的文章来了解 Maven 在做什么。 maven.apache.org/guides/introduction/…【参考方案3】:

除了 Maven 组装插件(以及其他几种方法)之外,请查看 Maven Shade Plugin。

Maven 阴影插件

这个插件提供了将工件打包成一个 uber-jar,包括它的依赖和遮蔽 - 即重命名 - 一些依赖的包。

以下是一个示例 maven 插件配置,用于创建具有 jar 依赖项的项目的 jar 输出:

<build>
        <plugins>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-shade-plugin</artifactid>
                <version>1.4</version>
                <executions>
                  <execution>
                    <phase>package</phase>
                    <goals>
                      <goal>shade</goal>
                    </goals>
                    <configuration>
                      <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                          <mainclass>Main Class of the jar file</mainclass>
                        </transformer>
                      </transformers>
                    </configuration>
                  </execution>
                </executions>
           </plugin>
        </plugins>
  </build>

【讨论】:

以上是关于Maven依赖管理的jar文件在打包后可部署文件中的位置?的主要内容,如果未能解决你的问题,请参考以下文章

maven基础和基本使用

Maven打包成Jar文件时依赖包的问题

如何在IntelliJ IDEA中检索maven依赖jar包的源码

jars和其他文件的maven打包

Maven 基础 | 使用 Maven 的正确姿势

maven项目依赖问题