Maven 2 复杂Maven装配
我正在尝试编写一个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文件),也可以包含另一个
- 使用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