我正在使用maven-assembly-plugin为我的多模块项目创建分发程序集(格式为“ dir”)。该项目如下所示:

+ my-project
   +-- my-child-project-1
   +-- my-child-project-2


子项目从my-project继承。 my-project是一个聚合,即在<modules>部分中定义子项目。

该程序集包含工件,资源等。我如何设置我的项目以包含该站点?

my-project站点的子模块链接必须有效。据我所知,这些链接在部署之前将无法工作。因此,我想我必须首先对该站点进行阶段部署(?)。根据docs的说法,只有在创建站点之后才能进行分阶段:


  此目标要求已经使用该站点目标生成了该站点,例如通过调用mvn site。


我该如何实现?

有没有一种方法可以用一个mvn package组装所有东西?我的汇编描述符应如何显示?

最佳答案

我不知道这是否是一个好的解决方案,但是没有其他答案,所以我想出了这个办法:

1.将装配体版本移到单独的子模块中

重要说明:我不知道这是否必要,但是,如果程序集是在根项目中配置的,我没有时间检查它是否也有效。否则,您必须在步骤2中使用不同的分类器在my-project中定义对my-project本身的依赖关系,我认为这将行不通。如果我写错了,请随时编辑此答案。

+ my-project
   +-- my-child-project-1
   +-- my-child-project-2
   +-- my-project-build


2.在构建项目中使用分类符site为所有模块定义依赖项

<!-- Yes, also for the parent project. However, not for the build project itself -->
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>my-project</artifactId>
    <version>${project.version}</version>
    <classifier>site</version>
</dependency>
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>my-project</artifactId>
    <version>${project.version}</version>
    <classifier>site</version>
</dependency>
...


3.在程序集描述符中定义dependencySets。通过将子模块站点内容移动到主模块站点目录的相应子目录来修复断开的链接。

这个想法是使用由于site -classifier依赖关系而生成的site-jar工件,并将其解压缩。模块链接是相对的,因此将内容解压缩到由其artifactIds命名的子目录中将修复这些链接。

<dependencySets>

    <dependencySet>
        <outputDirectory>site</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <useProjectAttachments>true</useProjectAttachments>
        <unpack>true</unpack>
        <includes>
            <include>*:my-project:jar:site</include>
        </includes>
    </dependencySet>

    <!-- sites of sub modules -->
    <dependencySet>
        <includes>
            <include>*:my-child-project-1:jar:site</include>
            <include>*:my-child-project-2:jar:site</include>
            <include>*:my-project-build:jar:site</include>
        </includes>
        <outputDirectory>site/${artifact.artifactId}</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <useProjectAttachments>true</useProjectAttachments>
        <unpack>true</unpack>
    </dependencySet>

    <!-- sites of sub-sub modules (if required) -->
    <dependencySet>
        <includes>
            ...
        </includes>
        <outputDirectory>site/${artifact.parent.artifactId}/${artifact.artifactId}</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <useProjectAttachments>true</useProjectAttachments>
        <unpack>true</unpack>
    </dependencySet>

    ...
</dependencySets>


4.在根项目中定义site:jar目标

默认情况下,此目标在package阶段执行,并生成“站点”附件(例如my-parent-1.0.0-site.jar),这些附件在步骤2中定义为依赖项,并在步骤3中解压缩:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.4</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>


5.运行mvn package生成程序集

结果是程序集中的子目录“站点”,其中包含带有工作链接的完整站点。

关于java - Maven:创建包含站点的分发程序集(多模块),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47268302/

10-16 09:25