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

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

提前致谢!

【问题讨论】:

    标签: maven-2 jar maven-plugin


    【解决方案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 现场演示。

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2010-10-10
      • 1970-01-01
      • 2011-07-28
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多