将 Maven 生成的站点添加到生成的包中

Posted

技术标签:

【中文标题】将 Maven 生成的站点添加到生成的包中【英文标题】:Add Maven generated site to generated package 【发布时间】:2010-02-24 17:01:12 【问题描述】:

为了为我们的项目提供一个一体化的 Jar,我们想知道是否可以将项目的生成站点(通过站点插件生成)包含到生成的项目的包中? 这背后的想法非常简单,我们有一个名为“sample”的项目,它演示了我们的 API 的用法,我们希望在单个包中为用户提供有关 API 及其用法的文档。 是否可以使用 Maven 来创建这样的 Jar?

提前致谢!

【问题讨论】:

【参考方案1】:

使用site:jar,然后使用程序集插件来创建一个包应该是可能的。

【讨论】:

是的,这可能是一个有趣的解决方案。我要试试。 我想做类似的事情,这对你有用吗?请您发布更多详细信息。【参考方案2】:

我在这里发布一个解决方案,用于使用最近的 Maven 3 中包含的 maven 生成的站点构建一个 war 文件。我已将所需的构建插件包装到一个配置文件中,该配置文件由 Hudson 设置 BUILD_NUMBER 系统属性激活。除了将站点目录添加到 war 之外,此配置还会生成一个 -javadoc.jar 工件(带有 attach-javadocs 执行的单独 maven-javadoc-plugin 负责执行此操作,如果不需要,您可以将其删除)。

<profiles>
    <!-- We want the javadoc jar and the site within the war only when building on Hudson -->
    <profile>
        <activation>
            <property>
                <name>BUILD_NUMBER</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.0-beta-3</version>
                    <configuration>
                        <reportPlugins>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-project-info-reports-plugin</artifactId>
                            </plugin>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-javadoc-plugin</artifactId>
                            </plugin>
                        </reportPlugins>
                    </configuration>
                    <executions> 
                        <execution> 
                            <id>attach-site</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals> 
                        </execution> 
                    </executions> 
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webResources>
                            <resource>
                                <!-- this is relative to the pom.xml directory -->
                                <directory>$project.build.directory/site</directory>
                                <targetPath>doc</targetPath>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

这是相同的配置文件,但用于 Maven2。如果您的 hudson 项目配置依赖于 maven2 hudson 插件,这将非常有用。

<profiles>
    <!-- We want the javadoc jar and the site within the war only when building on Hudson -->
    <profile>
        <activation>
            <property>
                <name>BUILD_NUMBER</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webResources>
                            <resource>
                                <!-- this is relative to the pom.xml directory -->
                                <directory>$project.build.directory/site</directory>
                                <targetPath>doc</targetPath>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>2.2</version>
                    <executions> 
                        <execution> 
                            <id>attach-site</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals> 
                        </execution> 
                    </executions> 
                </plugin>
            </plugins>
        </build>
        <reporting>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                </plugin>
            </plugins>
        </reporting>
    </profile>
</profiles>

【讨论】:

有什么办法可以把它转换成war文件?它真正需要的是一个通用的 web.xml 文件。这将使其可部署到 Web 应用容器【参考方案3】:

诀窍是配置 maven-site-plugin 以在包之前发生的阶段生成站点(例如 prepare-package),然后将生成的站点包含到 webapp 中正确配置 maven-war-plugin。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.5</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>site</goal>
                <goal>stage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <webResources>
            <resource>
                <directory>$basedir/target/staging</directory>
                <includes>
                    <include>**</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

Here你可以找到一个使用这个配置的示例项目。 Here 现场演示。

【讨论】:

以上是关于将 Maven 生成的站点添加到生成的包中的主要内容,如果未能解决你的问题,请参考以下文章

在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

如何配置 pom.xml 以将 jooq 类生成到两个不同的包中?

如何将 .SQLite 正确添加到 App 的包中?

我如何将数据库添加到 netbean 项目的包中

如何正确地将资源 (*.res) 文件添加到带有组件的包中?

如何将示例项目添加到 Flutter 包中?