【问题标题】:Alternative to maven assembly:single for packagingmaven组装的替代方案:单个用于包装
【发布时间】:2012-08-23 07:18:15
【问题描述】:

除了创建一个大的胖程序集之外,还有哪些打包独立 java 应用程序的替代方法,这在某些情况下很可怕,因为

1) 两个或多个 jar 的资源路径中的冲突文件(具有相同的名称,例如 reference.xml)被幸运的覆盖。

2) 如果不重新提取、合并和压缩,则无法替换单个 jar。

是否有更多关于分解的战争文件行的解决方案,所有库都在 lib 文件夹中,主类文件的 jar 包含清单条目。 我确信我已经在 ant 中做到了这一点,并且肯定也可以在 maven 中完成。

【问题讨论】:

    标签: java maven maven-assembly-plugin


    【解决方案1】:

    我倾向于使用Mojo's AppAssembler Maven Plugin 进行分发,然后使用Maven Assembly Plugin 将所有内容打包到包含分发的tar.gzzip 文件中...有时我会更进一步并使用Mojo's Unix Maven Plugin 创建 .deb.rpm 安装程序,我从需要 Windows 安装程序的人那里听到了好消息,使用 Mojo's NSIS Maven Plugin 虽然 NPanday's WiX Maven plugin 应该能够做类似的事情,以前当我需要生成 Windows 安装程序时,我编写了我自己的 WiX Maven 插件,但它的源代码保留在我以前的雇主那里。

    如果你走AppAssembler 路线,我怀疑你可能更喜欢repositoryLayoutflat

    【讨论】:

      【解决方案2】:

      Assembly 插件将是带有自定义描述符的不错选择:

      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
          <descriptors>
              <descriptor>assembly.xml</descriptor>
          </descriptors>
      </configuration>
      </plugin>
      

      并且在 assembly.xml 中:

      <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
      <id>bin</id>
      <formats>
          <format>tar.gz</format>
      </formats>
      <includeBaseDirectory>true</includeBaseDirectory>
      <fileSets>
          <fileSet>
              <directory>${project.build.directory}</directory>
              <outputDirectory>/</outputDirectory>
              <includes>
                  <include>${project.artifactId}-${project.version}.jar</include>
              </includes>
          </fileSet>
      </fileSets>
      <dependencySets>
          <dependencySet>
              <outputDirectory>/lib</outputDirectory>
              <useProjectArtifact>false</useProjectArtifact>
              <unpack>false</unpack>
          </dependencySet>
      </dependencySets>
      </assembly>
      

      所有的依赖都将在项目jar文件旁边的lib目录中单独的jars。

      【讨论】:

      • 您提供的配置文件运行良好,只是项目的 jar 本身没有构建到 tar.gz 文件中。为此,我必须做一个罐子并将其包括在内。但这仍然是我得到的最好的。
      • ${project.artifactId}-${project.version}.jar 可能与您项目的 jar 不匹配。应该根据jar的名字改成名字。
      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 2020-04-21
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多