Maven 2 复杂Maven装配

Maven 2 复杂Maven装配,maven-2,maven-assembly-plugin,Maven 2,Maven Assembly Plugin,我正在尝试编写一个maven程序集,我不知道如何继续。这相当复杂,所以我在谷歌上搜索的例子并没有真正的帮助。这就是我想做的: 使用launch4j创建安装文件。假设jar文件已正确组装(因此需要maven组装),则此部分工作正常 安装程序包含一些依赖项。它们(当前)是使用带有依赖项的jar描述符ref组装的。这同样有效 我需要在大jar中包含一个war文件(来自另一个项目)。这是我的困惑 我如何创建一个assembly.xml,它既可以执行jar依赖项(解包所有jar文件),也可以包含另一个

我正在尝试编写一个maven程序集,我不知道如何继续。这相当复杂,所以我在谷歌上搜索的例子并没有真正的帮助。这就是我想做的:

  • 使用launch4j创建安装文件。假设jar文件已正确组装(因此需要maven组装),则此部分工作正常
  • 安装程序包含一些依赖项。它们(当前)是使用带有依赖项的
    jar
    描述符ref
    组装的。这同样有效
  • 我需要在大jar中包含一个war文件(来自另一个项目)。这是我的困惑
我如何创建一个
assembly.xml
,它既可以执行jar依赖项(解包所有jar文件),也可以包含另一个项目(未解包)中的war文件

任何帮助都将不胜感激

我如何创建一个assembly.xml,它既可以执行jar依赖项(解包所有这些jar文件),也可以包含另一个项目(未解包)中的war文件

假设您有一个类似于下面的项目结构(我假设一个简单的结构,因为您没有提到任何特别的内容):

这是带有依赖项的
jar的一个小变化,它将创建一个jar:

  • 除战争之外的依赖项,未打包
  • 网络应用的战争,而不是解包
  • 这些类来自项目本身
如下图所示:

$ mvn clean package [INFO] Scanning for projects... ... $ cd target; jar xvf Q3762049-1.0-SNAPSHOT-uberjar.jar created: META-INF/ inflated: META-INF/MANIFEST.MF created: org/ created: org/apache/ created: org/apache/commons/ created: org/apache/commons/lang/ created: org/apache/commons/lang/builder/ created: org/apache/commons/lang/enum/ created: org/apache/commons/lang/enums/ created: org/apache/commons/lang/exception/ created: org/apache/commons/lang/math/ created: org/apache/commons/lang/mutable/ created: org/apache/commons/lang/text/ created: org/apache/commons/lang/time/ inflated: META-INF/LICENSE.txt inflated: META-INF/NOTICE.txt inflated: org/apache/commons/lang/ArrayUtils.class ... created: META-INF/maven/ created: META-INF/maven/commons-lang/ created: META-INF/maven/commons-lang/commons-lang/ inflated: META-INF/maven/commons-lang/commons-lang/pom.xml inflated: META-INF/maven/commons-lang/commons-lang/pom.properties inflated: my-webapp-1.0-SNAPSHOT.war created: com/ created: com/stackoverflow/ inflated: com/stackoverflow/App.class $mvn清洁套餐 [信息]正在扫描项目。。。 ... $cd目标;jar xvf Q3762049-1.0-SNAPSHOT-uberjar.jar 创建:META-INF/ 膨胀:META-INF/MANIFEST.MF 创建:org/ 创建:org/apache/ 创建:org/apache/commons/ 创建:org/apache/commons/lang/ 创建:org/apache/commons/lang/builder/ 创建:org/apache/commons/lang/enum/ 创建:org/apache/commons/lang/enums/ 创建:org/apache/commons/lang/exception/ 创建:org/apache/commons/lang/math/ 创建:org/apache/commons/lang/mutable/ 创建:org/apache/commons/lang/text/ 创建:org/apache/commons/lang/time/ 膨胀:META-INF/LICENSE.txt 膨胀:META-INF/NOTICE.txt 膨胀:org/apache/commons/lang/ArrayUtils.class ... 已创建:META-INF/maven/ 创建:META-INF/maven/commons-lang/ 创建:META-INF/maven/commons-lang/commons-lang/ 膨胀:META-INF/maven/commons-lang/commons-lang/pom.xml 膨胀:META-INF/maven/commons-lang/commons-lang/pom.properties 充气:my-webapp-1.0-SNAPSHOT.war 创建:com/ 已创建:com/stackoverflow/
膨胀:com/stackoverflow/App.classe你想把所有东西都放在一个大Jar文件中吗?你看过优步罐子吗?
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q3762049</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <!-- this is the war we want to include in the assembly -->
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>my-webapp</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>war</type>
      <scope>runtime</scope>
    </dependency>
    <!-- and below, the other dependencies -->
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
    </dependency>
    ...
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/uberjar.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
<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>uberjar</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <scope>runtime</scope>
      <useProjectArtifact>false</useProjectArtifact>
      <excludes>
        <exclude>*:war</exclude>
      </excludes>
    </dependencySet>
    <dependencySet>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <useProjectArtifact>false</useProjectArtifact>
      <includes>
        <include>*:war</include>
      </includes>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>
$ mvn clean package [INFO] Scanning for projects... ... $ cd target; jar xvf Q3762049-1.0-SNAPSHOT-uberjar.jar created: META-INF/ inflated: META-INF/MANIFEST.MF created: org/ created: org/apache/ created: org/apache/commons/ created: org/apache/commons/lang/ created: org/apache/commons/lang/builder/ created: org/apache/commons/lang/enum/ created: org/apache/commons/lang/enums/ created: org/apache/commons/lang/exception/ created: org/apache/commons/lang/math/ created: org/apache/commons/lang/mutable/ created: org/apache/commons/lang/text/ created: org/apache/commons/lang/time/ inflated: META-INF/LICENSE.txt inflated: META-INF/NOTICE.txt inflated: org/apache/commons/lang/ArrayUtils.class ... created: META-INF/maven/ created: META-INF/maven/commons-lang/ created: META-INF/maven/commons-lang/commons-lang/ inflated: META-INF/maven/commons-lang/commons-lang/pom.xml inflated: META-INF/maven/commons-lang/commons-lang/pom.properties inflated: my-webapp-1.0-SNAPSHOT.war created: com/ created: com/stackoverflow/ inflated: com/stackoverflow/App.class