通过 UI 将 Sources.jar 存档部署到 Artifactory

Deploying Sources.jar Archive to Artifactory through UI

我们正在使用 Maven 中央存储库中不存在的第三方库,我们不想将此存档作为工件部署到 Artifactory。我们正在尝试通过 Artifactory UI 来做到这一点,并且我们成功部署了 archive.jar 和 archive-sources.jar。当我们通过 Gradle 将此依赖项添加到我们的 build.gradle 脚本时,就会出现问题。 Archive.jar 是从我们的存储库中获取的,但未获取 archive-sources.jar。我们正在使用 Eclipse 进行开发,您可以通过屏幕截图看到问题。

我们尝试了几种方法,包括在 Artifactory UI 中定义分类器、使用 Artifactory POM 编辑器编辑 pom、手动发布 pom 文件,但均无效果。无论我们做什么,我们都无法获得该档案的来源。任何形式的帮助都会节省大量时间和精力。谢谢!

Artifactory 截图UI:

我们已经解决了这个问题,但是有点复杂。应用解决方案有很多步骤:

对于 jain-sdp 存档,步骤如下:

1- 使用分类器 "sources" 部署 jain-sdp 源工件,如屏幕截图所示。

2- 手动上传包含 "sourceDirectory" 标签的 jain-sdp.pom 文件:

  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>javax.sip</groupId>
    <version>1.2</version>
    <artifactId>jain-sip</artifactId>
  </parent>
  <groupId>javax.sdp</groupId>
  <artifactId>jain-sdp</artifactId>
  <version>1.0.1111</version>
  <packaging>jar</packaging>
  <name>jain-sdp</name>
  <url>http://jain-sip.dev.java.net</url>
   <build>
    <sourceDirectory>../../src/javax/</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <includes>
                    <include>**/sdp/**</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>target/javax/</directory>
            <includes>
                <include>sdp/**</include>
            </includes>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>    
   </build>

</project>

3- 手动创建以下文件。

pom.xml:

  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>javax.sip</groupId>
    <version>1.2</version>
    <artifactId>jain-sip</artifactId>
  </parent>
  <groupId>javax.sdp</groupId>
  <artifactId>jain-sdp</artifactId>
  <version>1.0.1111</version>
  <packaging>jar</packaging>
  <name>jain-sdp</name>
  <url>http://jain-sip.dev.java.net</url>
   <build>
    <sourceDirectory>../../src/javax/</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <includes>
                    <include>**/sdp/**</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>target/javax/</directory>
            <includes>
                <include>sdp/**</include>
            </includes>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>    
   </build>

</project>

pom.properties:

#Generated by Maven
#Tue Feb 05 21:33:14 CET 2008
version=1.2
groupId=javax.sdp
artifactId=jain-sdp

4- 将第 3 步中创建的文件包含到存档的以下路径中:

META-INF/maven/javax.sdp/jain-sdp/pom.属性 META-INF/maven/javax.sdp/jain-sdp/pom.xml

请注意,这些文件应该添加到 jain-sdp.jar,而不是 jain-sdp-sources.jar

5- 通过 UI

上传 jain-sdp.jar 到 Artifactory

我认为这些步骤应该手动完成。我能想到的没有其他方法可以解决这个问题。应该手动将 sourceDirectories 包含到 pom 文件和存档中。

将源文件添加到 jar 中,观察与class 文件内容相同的目录结构。

这意味着您不需要管理另一个工件,也不需要更新您的 pom.xml

执行此添加的最简单步骤是在 CLI 上:切换到您的源目录和 "update" jar。使用此特定的当前工作目录执行此操作,这将保留正确的相对文件名。

比如我有目录结构:

~/project/src/com/mycompany
~/project/target

并在 ~/project/target 中构建了一个名为 existing.jar

的 jar
$ cd ~/project/src; jar uvf ../target/existing.jar com

$ jar tvf ~/project/target/existing.jar

应该在同一树中显示 class 个文件和源文件。

  ...
  6923 Sun Sep 18 23:19:36 PDT 2016 org/spacehq/reddit/util/http/ResponseType.class
  4676 Sun Sep 18 22:30:38 PDT 2016 org/spacehq/reddit/util/http/ResponseType.groovy
  ...

IntelliJ IDEA 检测到 jar 中的这些源文件,并在打开相关 class 文件时显示它们。我假设其他功能齐全的 IDE 也会。

当然,您应该能够使用 Maven 以某种方式自动执行此操作,以消除人工步骤,但这对于一次性来说是好的。