实际上,我生成了一个包含我的项目文档的 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>
配置文件实际上在做什么:
- 配置 Maven Site Plugin 的执行, 附加到 prepare-package阶段并运行
site
和jar
目标(同样由 @khmarbaise 建议)。 - 通过 Copy Rename Maven Plugin 将文件从 jar 重命名为 zip
- 通过 Build Helper Maven Plugin 将 zip 附加到构建中及其
attach-artifact
目标
因此,运行
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/