maven - 使用 Maven 构建站点 zip

标签 maven maven-3 pom.xml maven-site-plugin

实际上,我生成了一个包含我的项目文档的 Maven 站点。它运作良好,事实上,如果运作良好以至于我的客户希望将该网站作为可交付成果(用于明显的文档目的)。

我如何告诉 Maven 构建整个站点的 zip 并将其部署到我的 Artifact 管理器 (Nexus)?我已经尝试了几件事,但如果我理解正确的话,部署 Artifact 和生成站点使用的是不同的生命周期,并且站点生成发生在 Artifact 部署之后。

我显然可以从站点部署期间部署的位置获取生成的站点,但我非常希望有一种自动和集中的方式...

PS:不允许客户访问我们的内部网站。

最佳答案

这是委托(delegate)给 Maven profile 的工作解决方案隔离行为(并加速正常构建),但如果需要也可以将其集成到默认构建中(尽管不推荐)。

<profiles>
    <profile>
        <id>site-zip</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.4</version>
                    <executions>
                        <execution>
                            <id>pack-site</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>site</goal>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <attach>false</attach>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>com.coderplus.maven.plugins</groupId>
                    <artifactId>copy-rename-maven-plugin</artifactId>
                    <version>1.0.1</version>
                    <executions>
                        <execution>
                            <id>rename-file</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>rename</goal>
                            </goals>
                            <configuration>
                                <sourceFile>${project.build.directory}/${project.build.finalName}-site.jar</sourceFile>
                                <destinationFile>${project.build.directory}/${project.build.finalName}-site.zip</destinationFile>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.10</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>attach-artifact</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <artifacts>
                                    <artifact>
                                        <file>${project.build.directory}/${project.build.finalName}-site.zip</file>
                                        <type>zip</type>
                                        <classifier>site</classifier>
                                    </artifact>
                                </artifacts>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

配置文件实际上在做什么:

因此,运行

mvn clean install -Psite-zip

还将在本地 Maven 缓存中安装压缩站点。 deploy然后阶段将在您的目标 Maven 存储库上执行相同的操作。

请注意,Maven Site Plugin 和 Copy Plugin 必须按上述顺序声明,以遵循同一阶段内所需的流程。

另请注意,如果 zip不是很强的要求,然后您可以跳过 Copy 和 Build Helper 执行,只使用 Maven Site 执行。默认情况下 jar如果站点已经附加到构建(因此它将被自动安装和部署),则创建。为了获得 zip,我们必须禁用此行为 (<attach>false</attach>) 并通过 Build Helper 插件重新附加它。

生成的压缩包自动有一个 classifier ,即 site在这种情况下。

关于maven - 使用 Maven 构建站点 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209730/

相关文章:

java - 如何跳过所有集成测试 (-DskipITs) 和一个单元测试 mvn 命令行

java - org.xml.sax.SAXParseException;cvc-complex-type.2.4.c : The matching wildcard is strict, 但找不到声明

maven-plugin - Maven Proguard 处理其他应用程序将依赖的库 jar

hibernate - 使用 maven、servlet、jsp 和 java 构建失败

maven - 故障安全插件不会在一个项目上运行,但会在另一个项目上运行——为什么?

java - 为什么我的 Maven 插件不在构建生命周期中运行?

java - 具有 google-cloud-core-grpc 依赖性的 Java 应用程序中的 Maven 冲突

java - 放置 JSTL 依赖项时出现 Tomcat 错误。使用 Maven

maven - 带有 Maven 的 Java 9 - 找不到模块

java - commons-fileupload 依赖有什么问题?