Maven:创建包含站点的分发程序集(多模块)

时间:2017-11-13 15:49:46

标签: java maven maven-assembly-plugin multi-module maven-site-plugin

我正在使用maven-assembly-plugin为我的多模块项目创建一个分发程序集(格式为“dir”)。该项目看起来像这样:

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

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

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

my-project网站指向子模块的链接必须有效。据我所知,链接在部署之前不起作用。因此,我想我必须首先(?)阶段部署网站。根据{{​​3}},只有在创建网站后才能进行分段:

  

此目标要求已使用网站目标生成网站,例如通过调用mvn网站。

我怎样才能做到这一点?

有没有办法让所有东西都集合在一起mvn package?我的程序集描述符必须如何?

1 个答案:

答案 0 :(得分:0)

我不知道,如果这是一个很好的解决方案,但没有其他答案,所以我提出了这个:

1。将程序集构建移动到单独的子模块

重要提示:我不知道是否有必要,但是如果在根项目中配置了程序集,我没有时间检查它是否也有效。否则,您必须在步骤2中使用不同的分类器在my-projectmy-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 - 分类器依赖性生成的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阶段执行,并生成“site”-attachments(例如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以生成程序集

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