3

抱歉,如果这在其他地方有所涉及,恐怕我找不到这个特别琐碎问题的答案。

我有一个 Maven 项目,它引用并构建了 4 个子项目(作为捆绑包)。我已经正确设置了子项目之间的依赖关系,最终我构建了 4 个不同的 .jar 文件:

  • parentproj/sub1/target/sub1.jar
  • parentproj/sub2/target/sub2.jar
  • parentproj/sub3/target/sub3.jar
  • parentproj/sub4/target/sub4.jar

我的问题是,如何设置 mu 父构建,以便当我从主 .POM 文件构建时,所有 4 个 jar 都放在“/parentproj/target/...”中?

另一个问题是,我如何还构建一个 xxxx-ALL.jar(合并这 4 个包的内容)?

4

2 回答 2

3

只需使用“dir”格式的Maven Assembly 插件将它们全部放在一个文件夹中,并使用“jar”格式将它们分组到一个 jar 中。

更多细节:

  1. 您从您的 Maven 项目开始(我们称它们为子项目)
  2. 创建一个新的maven项目(pom打包),使用<module>标签聚合所有子项目
  3. 将程序集插件放入您的 pom.xml 文件中(见下文)
  4. 创建正确的 assembly.xml 文件(见下文)

pom.xml 文件:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
                <id>distro-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <appendAssemblyId>false</appendAssemblyId>
                    <finalName>somefolder</finalName>
                    <attach>false</attach>
                    <descriptors>
                    <descriptor>assembly.xml</descriptor>
                    </descriptors>
                <phase>package</phase>
            </configuration>
        </execution>
    </executions>
</plugin>

组装.xml 文件:

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>SomeName</id>
<formats>
    <format>dir</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<baseDirectory></baseDirectory>

<fileSets>
    <fileSet>
        <directory>appfiles</directory>
        <includes>
            <include>**</include>
        </includes>
        <outputDirectory>.</outputDirectory>
    </fileSet>
</fileSets>

<moduleSets>
    <moduleSet>
        <!-- useAllReactorProjects must be false if the assembly's run on the project with the module list -->
        <useAllReactorProjects>false</useAllReactorProjects>
        <includeSubModules>false</includeSubModules>

        <binaries>
            <includeDependencies>true</includeDependencies>
            <outputDirectory>bundle</outputDirectory>
            <unpack>false</unpack>
        </binaries>
    </moduleSet>
</moduleSets>

于 2012-05-06T17:02:41.393 回答
1

另一个问题是,我如何还构建一个 xxxx-ALL.jar(合并这 4 个包的内容)?

您可以使用Maven shade plugin创建一个 uber-jar(一个包含项目所有依赖项的 jar)。只需使用这些作为依赖项创建另一个项目并生成这个 uber-jar。

于 2012-05-06T18:40:36.820 回答