Java 如何将带有类的JAR文件分发给其他开发人员?

Java 如何将带有类的JAR文件分发给其他开发人员?,java,maven,gradle,Java,Maven,Gradle,我需要将一些编译好的JAVA类分发给另一个开发团队。这样我就可以把编译好的类打包 然而,我的Java类也依赖于库A、B和C 最专业的方法是什么 如何在gradle项目中包含位于文件系统某处的自定义JAR文件 我如何向其他开发团队传达依赖关系: 将所有依赖项“编译”到我的JAR中。但是,这可能会导致(版本)冲突 为普通JAR提供我自己的JAR文件,并提供一个带有依赖项的Gradle片段,这些依赖项应该包含在他们的Gradle项目中(或者ANT/Maven,或者只是他们使用的) 有没有办法:

我需要将一些编译好的JAVA类分发给另一个开发团队。这样我就可以把编译好的类打包

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

最专业的方法是什么

  • 如何在gradle项目中包含位于文件系统某处的自定义JAR文件
我如何向其他开发团队传达依赖关系:

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

  • 编写一个Gradle文件,将JAR拉入本地文件系统,以及所有依赖项,例如通过在Gradle文件中描述它们
  • 在编译的JAR文件(“自描述”JAR文件)中包含一个Gradle/Manifest文件,该文件由Gradle自动读取并自动提取所有依赖项
处理这个问题的最佳方法是什么?

一种方法是:
创建一个包含所有要共享的源文件的服务。将此服务命名为“开发者依赖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>
你的公司
更多细节

最专业的方法是什么

建议的方法是使用一个,例如

你一定要小心

然后,您可以使用
mvn clean deploy
(使用Maven)或其他等效工具(如果您使用的是其他构建工具,如Gradle)部署快照并释放工件

确保还部署了源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> 

[...]
org.apache.maven.plugins
maven源插件
3.2.1
[...]
[...]
maven源插件
附加来源
罐子没有叉子
[...]

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

您需要一个人工制品管理器,如artifactory()

然后,您可以编写一个gradle脚本来构建jar,并将其发布到artifactory服务器及其所有依赖项。如果依赖项是公开的,则无需发布它们,因为artifactory服务器将具有到在线存储库(例如jcenter、mavencentral)的链接。

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

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

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

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

做到这一点的最佳方法是向开发人员提供源代码,以便他们能够自己构建它!(也是最专业的,IMO)将所有依赖项“编译”到我的JAR中。这是最好的方法之一。其他开发人员不必担心其他库的版本。即使有这些库的任何新版本,您自己的类文件也知道要依赖哪个版本。或者更好的是,设置一个源代码存储库和一个工件存储库来保存JAR文件,等等,并允许其他团队访问存储库。@Sara-这是向非开发人员客户交付代码时的一个好方法。但是开发人员需要知道依赖关系是什么,并且(通常)有能力修补它们。访问源代码将使他们更容易调试代码并发现/报告代码中的错误!我建议在发布时遵循Oracle的做法。一个单独的jar用于实际类及其依赖项,另一个jar用于源文件。
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
        }
    }
}
repositories {
    maven {
        url "http://repo.mycompany.com/artifactory"
    }
}

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