如何为应用程序,源代码和文档生成单独的jar文件(对于central.sonatype.org)

时间:2016-03-24 22:14:04

标签: java scala maven jar sbt

Sonatype有一个我想要部署jar文件的存储库,他们要求为应用程序,源代码和javadoc提供单独的文件:

示例:

example-application-1.4.7.pom
example-application-1.4.7.jar
example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar

在Scala SBT中,我有一个名为" package"它为项目生成jar文件,但只生成" example-application-1.4.7.jar"。

问题:如何生成其他两个jar文件?

1 个答案:

答案 0 :(得分:3)

在Maven中,为了获得额外的-sources-javadoc工件,请在POM文件中添加以下内容:

<build>
    <plugins>
        <!-- additional plugin configurations, if any.. -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

请注意上面的代码段:

执行

mvn clean package

您可以在target文件夹中找到这两个额外的jar。

.pom文件是在install阶段生成的,但不会放在target文件夹下。基本上,它是您的pom.xml文件的副本,具有不同的扩展名,并在依赖中介过程中由Maven使用,以检查相关工件需要哪些传递依赖项。

执行

mvn clean install

Maven会在path_to_cache/.m2/repository/your_groupId/your_artifactId/your_version/下的本地缓存(在您的计算机中)中安装工件。在此文件夹中,您还可以找到.pom文件,通常您不需要分发(由Maven自动创建)。

进一步说明:您可能不希望在每个构建中生成这些额外的jar文件,因此为了加快正常构建并仅按需提供它们,您可以将上面的代码段包装在Maven profile

您可以通过从build部分删除上面的代码段并在您的pom末尾添加更多部分来实现此目的:

<profiles>
    <profile>
        <id>prepare-distribution</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.0.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>2.10.3</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

因此正常构建不再创建这些jar,但在执行以下内容时:

mvn clean install -Pprepare-distribution

你会反过来让他们回来。 -P选项实际上是按需激活使用标识prepare-distribution定义的配置文件。

使用Maven 3,默认配置文件已作为super pom的一部分执行,它执行完全相同的操作(源和javadoc工件),因此无需向现有项目添加任何内容。只需运行:

mvn clean install -Prelease-profile

或者,通过属性激活它

mvn clean install -DperformRelease=true

然而,正如超级pom中所指出的,此配置文件可能会在将来的版本中被删除(尽管从第一个Maven 3 版本到版本 3.3.9 到目前为止)

  

注意:将从超级POM的未来版本中删除发布配置文件

此警告背后的主要原因很可能是推动Maven Release Plugin的使用,useReleaseProfile间接通过release:perform目标的Maven in 5 minutes选项使用此配置文件。< / p>

正如评论所强调的那样,如果你不熟悉maven(特别是通过控制台),我肯定会推荐

  • 查看官方Maven Release Plugin文档,以便快速查看。
  • 从命令行使用Maven,Maven是否为您提供最好的服务。 IDE集成很棒,但命令行是真正的转折点。
  • 然后使用上面的POM自定义,熟悉一些概念和行为,首先直接作为默认构建的一部分,然后移至配置文件。
  • 然后,只有这样,转到http://www.example.com/page/images/main.png用法。我推荐它作为最后一步,因为你已经获得了更多的信心和理解,并认为它不那么神奇,更合理。