因此,您创建了一个您觉得非常棒的程序集描述符,以至于您想在几个项目之间共享它。解决此问题的最简单方法是为您的程序集描述符创建一个单独的项目。我们将项目称为my-assembly-descriptor。
注意:此示例已针对版本 2.2 进行了更新。此示例的先前版本是错误的。您必须按照以下步骤使您的共享程序集描述符适用于版本 2.2 或更高版本。
该项目的目录结构如下所示:
my-assembly-descriptor
+-- src
| `-- main
| `-- resources
| `-- assemblies
| `-- myassembly.xml
`-- pom.xml
该项目中只有两个文件:您的程序集描述符myassembly.xml和pom.xml。
注意:您的程序集描述符必须位于目录/src/main/resources/assemblies中才能用于程序集插件。
首先让我们检查一下共享程序集描述符项目的 POM。这很简单:
<project> <modelVersion>4.0.0</modelVersion> <groupId>your.group.id</groupId> <artifactId>my-assembly-descriptor</artifactId> <version>1.0-SNAPSHOT</version> <name>Shared Assembly Descriptor</name> </project>
接下来让我们看看我们的共享程序集描述符。这只是一个例子。将其替换为您要共享的程序集描述符。
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>my-assembly-descriptor-id</id>
<formats>
<format>jar</format>
</formats>
<fileSets>
<fileSet>
<includes>
<include>pom.xml</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>src</directory>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
</assembly>
在此项目上运行“ mvn install ”以将 Shared Assembly Descriptor 项目安装到您的本地存储库中。
在想要使用我们的 Shared Assembly Descriptor 的项目中,您需要添加my-assembly-descriptor作为对 Assembly Plugin 的依赖。这使我们的程序集描述符可供程序集插件使用。
注意:您需要在<descriptorRef>中使用程序集描述符的文件名,不带 xml 文件扩展名。您不能使用程序集描述符的 id。此示例中使用的程序集描述符具有文件名myassembly.xml,但其 id 是my-assembly-descriptor-id。因此,我们使用myassembly来引用该程序集描述符。
<project>
<groupId>your.group.id</groupId>
<artifactId>my-project</artifactId>
<version>1.0-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
...
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<dependencies>
<dependency>
<groupId>your.group.id</groupId>
<artifactId>my-assembly-descriptor</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- This is where we use our shared assembly descriptor -->
<descriptorRefs>
<descriptorRef>myassembly</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
</project>