【问题标题】:Using Maven to create a zip file containing an executable jar with dependencies使用 Maven 创建一个包含依赖项的可执行 jar 的 zip 文件
【发布时间】:2011-04-12 21:50:27
【问题描述】:

我正在尝试为我的项目创建一个可分发的 zip,其中包含多个配置文件和目录,以及我的项目的可执行 jar。在 Maven 程序集插件中,我发现了如何制作具有完全依赖关系的可执行 jar。但是,我无法弄清楚如何在 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 中创建空目录?另外,如何更改生成的文件的名称?

感谢您的帮助!

【问题讨论】:

    标签: maven-2 maven-assembly-plugin


    【解决方案1】:

    首先,使用 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>
    

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

    【讨论】:

    • 谢谢,我在此基础上做了一些工作,并取得了一些进展。然后我又卡住了。有什么建议吗?
    • 谢谢。你的回答很棒,很有帮助。
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多