1

我需要将一些已编译的 JAVA 类分发给另一个开发团队。所以我可以 JAR 编译的类。

然而,我的 Java 类也依赖于库 A、B 和 C。

最专业的方法是什么?

  • 如何在 gradle 项目中包含位于文件系统某处的自定义 JAR 文件?

以及如何将依赖关系传达给其他开发团队:

  • 将所有依赖项“编译”到我的 JAR 中。但是,这可能会导致(版本)冲突。
  • 为普通 JAR 提供我自己的 JAR 文件,并提供一个带有依赖项的 Gradle 片段,它们应该包含在他们的 Gradle 项目(或 ANT/Maven 或他们使用的)中。

有没有办法:

  • 编写一个 Gradle 文件,将 JAR 拉入本地文件系统,以及所有依赖项,例如通过在 gradle 文件中描述它们?
  • 将 Gradle/Manifest 文件包含到已编译的 JAR 文件(“自我描述”JAR 文件)中,Gradle 会自动读取该文件并自动获取所有依赖项?

处理这个问题的最佳方法是什么?

4

3 回答 3

1

您需要一个人工制品管理器,例如人工制品(https://jfrog.com/open-source/)。

然后,您可以编写一个 gradle 脚本来构建您的 jar,并将其与所有依赖项一起发布到工件服务器。如果依赖项是公开可用的,则无需发布它们,因为工件服务器将具有到在线存储库(例如 jcenter、mavencentral)的链接。 https://www.jfrog.com/confluence/display/JFROG/Gradle+Artifactory+Plugin

plugins {
   id 'maven-publish'
   id "com.jfrog.artifactory" version "4.15.2"
}

artifactory {
    contextUrl = "http://repo.mycompany.com/artifactory"
    publish {
        repository {
            repoKey = 'libs-snapshot-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true

        }       
        defaults {
            publications ('mavenJava')
        }
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
           groupId = 'com.mycompany'
           artifactId = 'myproject'
           version = '1.0'
           from components.java
        }
    }
}

然后,您的同事可以编写一个 maven 或 gradle 脚本来指定该 jar 并下载它,以及它的所有依赖项。

repositories {
    maven {
        url "http://repo.mycompany.com/artifactory"
    }
}

dependencies {
    implementation group: 'com.mycompany', name: 'myproject', version:'1.0'
}

这种依赖管理就是 maven 和 gradle 等构建工具的用途。

于 2020-05-16T16:24:44.577 回答
1

最专业的方法是什么?

推荐的方法是使用Maven 存储库管理器,例如Sonatype Nexus

确保配置单个存储库组

mvn clean deploy然后,如果您使用其他构建工具(例如 Gradle),您可以使用(使用 Maven)或其他等效工具部署 SNAPSHOT 并发布工件。

确保您还部署了源 jar,以便开发人员可以轻松地从他们的 IDE 中访问源。

使用 Maven:

<pluginManagement>
    <plugins>
      [...]
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-source-plugin</artifactId>
         <version>3.2.1</version>
      </plugin>
      [...]
    </plugins>
</pluginManagement>

<plugins>
   [...]
   <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
   </plugin>
   [...]
</plugins> 

只要部署的pom.xml文件声明了所有依赖项,支持 Maven 依赖项的构建工具将确保它们也下载所有传递依赖项。

于 2020-05-16T08:27:59.880 回答
0

一种方法是:
使用您要共享的所有源文件创建服务。将此服务命名为“developer-dependency-sdk”。
您的此服务的 POM 将如下所示:

<groupId>your.company</groupId>
<artifactId>developer-dependency-sdk</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<distributionManagement>
    <repository>
        <id>project-id</id>
        <url>http://your_repository/server</url>
    </repository>
</distributionManagement>

现在,任何其他项目都可以将其项目图像中的图像用作依赖项:

 <pluginRepositories>
    <pluginRepository>
      <id>project-id</id>
      <name>Dependency Repository</name>
      <url>https://your_repository/server</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

上面的 POM 部分将告诉您当前的项目从提供的 URL 中选择依赖项。在此之后,您可以简单地添加您的依赖项。查看此链接了解更多详情。

于 2020-05-16T07:49:35.873 回答