我正在尝试编写maven程序集,但我不确定如何继续。它相当复杂,所以我谷歌的例子并没有真正帮助。这就是我想要做的事情:
jar-with-dependencies
descriptorRef
汇编(当前)。这也有效。如何创建一个assembly.xml
,它将同时执行带有依赖项的jar(解压所有这些jar文件)并包含另一个项目的war文件(未解压缩)。
任何帮助都将不胜感激。
答案 0 :(得分:2)
如何创建一个assembly.xml,它将同时执行带有依赖项的jar(解压缩所有这些jar文件)并包含来自另一个项目的war文件(未解压缩)。
假设你有一个类似于下面的项目结构(我假设一个简单的结构,因为你没有提到任何特别的东西):
. ├── pom.xml └── src ├── main │ ├── assembly │ │ └── uberjar.xml │ └── java │ └── com │ └── stackoverflow │ └── App.java └── test └── java └── com └── stackoverflow └── AppTest.java
使用以下pom.xml:
<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>
如您所见,
jar-with-dependencies
描述符,我们将在我们自己的自定义程序集描述符中重用它。 runtime
范围声明了依赖关系,以便我们能够将其包含在程序集中。现在,自定义uberjar.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>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>
这是创建jar的jar-with-dependencies
描述符的一点变体:
如下图所示:
$ 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