jars和其他文件的maven打包

Posted

技术标签:

【中文标题】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>

【讨论】:

以上是关于jars和其他文件的maven打包的主要内容,如果未能解决你的问题,请参考以下文章

maven systemPath方式加载和打包

maven systemPath方式加载和打包

使用maven-shade-plugin打包maven项目,项目使用spring框架,打包成jar时报错,跪求大佬,弄了好久没出?

Maven打包:将config和lib以及jar分开打包(探讨各种打包的区别)

请问maven工程jar包,war包,pom打包,都是怎么定的?

maven打包问题?