首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven:创建包含站点的分发程序集(多模块)

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

Stack Overflow用户
提问于 2017-11-13 15:49:46
回答 1查看 196关注 0票数 1

我正在使用maven程序集插件为我的多模块项目创建一个分发程序集(格式为"dir")。该项目如下:

代码语言:javascript
复制
+ my-project
   +-- my-child-project-1
   +-- my-child-project-2

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

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

my-project站点到子模块的链接必须工作。据我所知,在部署之前,链接将无法工作。因此,我想我必须先部署站点(?)。根据文档,只有在创建站点之后才有可能进行分期:

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

我怎样才能做到这一点?

有办法让所有东西都用一个mvn package组装吗?我的程序集描述应该是什么样子的?

EN

回答 1

Stack Overflow用户

发布于 2017-11-16 08:08:56

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

1.将程序集生成移动到单独的子模块中。

重要:我不知道这是否必要,但是我没有时间检查它是否也能工作,如果程序集是在根项目中配置的。否则,在步骤2中,您必须用不同的分类器在my-project中定义一个依赖项以my-project本身,我认为这是行不通的。如果我错了,可以随意编辑这个答案。

代码语言:javascript
复制
+ my-project
   +-- my-child-project-1
   +-- my-child-project-2
   +-- my-project-build

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

代码语言:javascript
复制
<!-- 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工件,并对它们进行解压缩。模块链接是相对的,因此将内容解压缩到由它们的artifactIds命名的子目录中将修复这些链接。

代码语言:javascript
复制
<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阶段执行,并生成“站点”-attachments(例如my-parent-1.0.0-site.jar),它被定义为步骤2中的依赖项,并在步骤3中解压缩:

代码语言:javascript
复制
<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生成程序集

结果是一个子目录“站点”在您的程序集中包含完整的网站与工作链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47268302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档