maven将多模块项目jar放入一个目录中

时间:2016-05-04 10:51:58

标签: java maven

我有一个多模块项目,我用tycho构建每个项目。一切包括阶段"安装"工作得很好。每个模块都会产生一个人工制品,这些工件安装在我当地的maven存储库中......大约有10件文物。

现在,如果构建成功,我想让maven另外将所有10个文物复制到本地目录。最后,当我重建我的应用程序时,我应该只看到一个包含所有(更新的)文物的目录。

顺便问一下,大公司如何将他们的产品从maven存储库中取出来?

1 个答案:

答案 0 :(得分:2)

您可以在项目中定义聚合器模块,该模块依赖于所有其他项目,然后使用maven-dependency-plugin收集所有jar

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
         <execution>
           <id>copy-libs</id>
           <phase>package</phase>
           <goals>
              <goal>copy-dependencies</goal>
           </goals>
           <configuration>
              <includeScope>runtime</includeScope>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
              <outputDirectory>${project.build.directory}/lib</outputDirectory>
           </configuration>
         </execution>
       </executions>
    </plugin>

当然,您可以使用相同的插件收集启动脚本等资源文件。创建另一个执行

<execution>
  <id>copy-sh-files</id>
  <phase>package</phase>
  <goals>
    <goal>unpack-dependencies</goal>
  </goals>
  <configuration>
    <outputDirectory>${project.build.directory}/scripts</outputDirectory>
    <includes>bin/*.sh</includes>
  </configuration>
</execution>

要将所有内容整合到一个zip中,您必须在src/assembly/zip.xml中使用该内容创建一个程序集文件

<assembly>
    <id>zip</id>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/bin</directory>
            <outputDirectory>.</outputDirectory>
            <includes>
                <include>*.cmd</include>
            </includes>
            <lineEnding>dos</lineEnding>
        </fileSet>
        <fileSet>
            <directory>target/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

并将maven-assembly-plugin添加到您的构建插件

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptor>src/assembly/zip.xml</descriptor>
    <finalName>yourProjectFinalName</finalName>
  </configuration>
  <executions>
    <execution>
      <id>zip-bundle</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

所有这些配置只是一种方法,但它是一个良好的开端。大公司通常对其包装有各种要求,包括安装人员等,因此没有一刀切的解决方案,而且通常是一个完成最终解决方案的过程。