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?
<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
中。我想在构建过程中实现这些东西:
B
将项目中的一些其他文件放入C
。
那我需要 gzipped 和 zipped
设置一些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文件在打包后可部署文件中的位置?的主要内容,如果未能解决你的问题,请参考以下文章