2012-10-11 61 views
2

我有一个maven项目,它通过配置(通过使用pom.xml和assembly.xml)打包一个包含编译后的webapp(war文件)和所有文件的zip文件src/main /文件夹,只要我们运行mvn clean package assembly:single如何在maven程序集中包含依赖文件

该项目导入/使用另一个maven项目(它变成一个jar文件),该项目反过来也导入/使用第三个maven项目(又是一个jar文件)。

第三个项目还包含src/main /文件夹内的一些文件,当我构建主项目时,我想将其放在zip文件中的其他文件旁边(位于链的顶部)成为战争文件)。

是否有可能以某种方式告诉maven将所有文件包含在它的所有依赖项(或一个特定的依赖项)内的特定文件夹中?

回答

1

您将需要从第三个项目生成额外的程序集来打包额外的文件。追加组装ID,因此它产生像third-1.0.0-extrafiles.zip

包命名的东西然后将其添加为使用<型> extrafiles < /在依赖描述符类型>第一个项目的依赖。在大会的第一个项目,你必须告诉它“解压”这种类型的依赖(这样你就不会得到一个拉链拉链)

+0

谢谢。你可以详细了解如何拆箱,以及通过追加程序集标识符是什么意思? – ByteFlinger

+0

在pom中指定程序集的地方,可以选择追加程序集ID。如果您的程序集中包含生成zip文件的if“foo”,则此选项将更改生成的程序包的名称。 project.1.0.0.zip变为project-1.0.0-foo.zip 然后在另一个项目中,通过使用<类型的>参数,您可以独立于常规jar而依赖于此包。这与用于src-jar等的机制相同 – AutomatedMike

+0

在您的第一个项目组装中,您可能希望包含所有依赖的jar包,而不需要解压缩jar。所以jar依赖关系进入程序集“打包”。但在你的情况下,你想要从zip中的第三个项目的文件作为常规文件“解压” – AutomatedMike

2

从这里开始:Maven: The Complete Reference - 8.5. Controlling the Contents of an Assembly

注意如果你deploy Maven项目assembly:assembly(你真的应该配置为<build>插件,而不是在命令行中使用),程序集会“附加”到项目并安装在存储库中。然后,您可以使用Maven依赖性表示法访问它们,即mygroup:myartifact:extrafiles:zip

我发现大会描述符<dependencySets>配置繁琐。它们确实适用于简单情况(包括应用程序在运行时需要的JAR文件)。

这是一般的方法我会采取你想要的结果:

  1. 使用Maven Dependency Plugindependency:copy从其他项目下载特定文件,将它们放置的target/

  2. 一个子目录下

    配置您的装配描述符以将这些下载/解压缩的文件添加到您的最终装配工件中。

或者,使用Maven Ant Run Plugin来破解一些东西。

+0

谢谢。我已经尝试了依赖:复制插件,它似乎工作,但它复制整个jar而不是包含在该项目中的特定文件。我还没有找到一种方法来指定文件,只排除jar本身。 – ByteFlinger

+0

了解我提到的Maven工件坐标。 – noahlz

+1

看到这个有用的页面:http://www.sonatype.com/people/2009/12/maven-dependency-resolution-a-repository-perspective/ – noahlz

相关问题