使用Maven创建一个包含带有依赖项的可执行jar的zip文件

时间:2010-09-15 20:51:40

标签: maven-2 maven-assembly-plugin

我正在尝试创建一个包含多个配置文件和目录的项目的可分发zip,以及我项目的可执行jar。在Maven程序集插件中,我发现了如何使可执行jar具有完全依赖性。但是,我一直无法弄清楚如何在jar后创建zip文件。理想情况下,我想将jar移动到已经拥有正确文件和子目录的目录,然后立即压缩整个文件。有没有办法做到这一点?

编辑:

我现在有罐子建筑,还有一个简洁的拉链。我的汇编文件如下所示:

<assembly>
   <id>financials-import-server</id>
   <formats>
      <format>zip</format>
   </formats>
   <dependencySets>
      <dependencySet>
      </dependencySet>
   </dependencySets>
    <files>
       <file>
          <source>target/import-server-1.0.0-SNAPSHOT.jar</source>
          <destName>service.jar</destName>
          <outputDirectory>/</outputDirectory>
       </file>
    </files>
</assembly>

我很自在地包括我需要的其他文件,例如配置文件或shell脚本。我还有几个问题。如何在zip中创建空目录?另外,如何更改生成的文件的名称?

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

首先,使用Maven JAR插件创建executable JAR

然后,将程序集配置为包含所需的所有文件(最终可以添加将启动应用程序的run.bat / run.sh文件),以及all dependencies

最后,将程序集创建绑定到pom.xml

中的程序包目标
<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-5</version>
      <configuration>
        <descriptors>
          <descriptor>/path/to/my-assembly.xml</descriptor>
        </descriptors>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
      ...

这样,你只需要运行一个Maven命令mvn clean install来编译项目,然后创建ZIP包。

如果我的答案不符合您的要求,请随时更新您的问题,并且还可以提供您当前的assembly.xmlpom.xml ...


修改

关于您的更新:

我认为程序集不会让你创建一个空目录。一个想法是放置一个空文件(例如readme.txt)并将目录包含在最终的ZIP中。例如,在我的项目中,我想要一个logs/目录,所以我的项目中有一个logs/目录,其中只包含一个readme.txt文件:

<fileSets>
    <fileSet>
        <directory>../my-package/logs</directory>
        <outputDirectory>logs/</outputDirectory>
    </fileSet>
</fileSets>

对于创建的ZIP的名称,您可以在pom.xml

中指定它
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-4</version>
            <configuration>
                <descriptors>
                    <descriptor>my-assembly.xml</descriptor>
                </descriptors>
                <finalName>TheName</finalName>

如果我是正确的,程序集将使用此名称,添加ID文件中定义的assembly.xml,并使用适合指定格式的前缀。