我知道这不是推荐的做法,我已阅读:
http://www.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/
我同意。但目前我需要解决以下问题:
我有一个包含多个 src 文件夹 A 和 B 的项目(使用 build-helper-maven-plugin)。我需要创建两个对应的 jars A(默认 jar)和 B。Jar A 包含来自 src 文件夹 A 的类,jar B 包含来自 src 文件夹 B 的类。
首先,我创建默认 jar A 并尝试从 src 文件夹 B 中排除所有类:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<excludes>
<exclude>**/B*</exclude>
</excludes>
</configuration>
</execution>
但是当我检查 A jar 时,它包含源文件夹 B 中包中的类。我的 reqex 排除符号是否错误/它只适用于包?
基于以下答案,我现在做:
<properties>
<artifactId.model>${project.artifactId}-model-${project.version}</artifactId.model>
<artifactId.default>${project.artifactId}-${project.version}</artifactId.default>
</properties>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>make-model-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${artifactId.model}</finalName>
<descriptors>
<descriptor>src/main/assembly/model.xml</descriptor>
</descriptors>
<attach>true</attach>
</configuration>
</execution>
<execution>
<id>make-default-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${artifactId.default}</finalName>
<descriptors>
<descriptor>src/main/assembly/default.xml</descriptor>
</descriptors>
<attach>true</attach>
</configuration>
</execution>
</executions>
</plugin>
其中模型的描述符是:
<assembly>
<id>model</id>
<formats>
<format>jar</format>
</formats>
<baseDirectory>target</baseDirectory>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/model_a</directory>
<includes>
<include>**/**</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}/model_b</directory>
<includes>
<include>**/**</include>
</includes>
</fileSet>
</fileSets>
</assembly>
然后我使用构建助手附加罐子。上面的问题显然是我得到 .java 文件而不是编译的 .class 文件。由于所有 .class 文件都位于所有源文件夹的相同 target/classes 文件夹中(请参阅 noahz 注释),我需要为相关包手动指定每个包含/排除 - 所以这种方法是行不通的 :-( 我认为最好的方法是创建一个子项目。