JFrog REST api 客户端应用程序因缺少 org.apache.commons.* 包而无法构建

JFrog REST api client app fails to build with missing org.apache.commons.* packages

我们有一个 Java 应用程序是使用 2017 版 JFrog java 服务 jar 构建的。今天我正在尝试使用最新的 jfrog 库重建它。我看到新服务 jar 中没有 org.apache.* 包。

这就是我构建 jfrog 服务 jar 的方式。

  1. 下载 2.8.6 源 zip 并展开它
  2. 已将 gradle 升级到最新版本和 运行 "gradle clean build -x test -x javadoc"
  3. 然后复制 services/build/lib/*services-2.8.6.jar ONLY 到我的项目 lib 文件夹

当我尝试构建时,我看到了很多编译错误。旧库被称为 artifactory-java-client-ning-services-1.2.0-all.jar.
我如何构建一个类似的?

在以下 Dror 回复后于 2020 年 11 月 6 日更新:

我更改了构建策略以指向 jcenter 以下载并创建带有 gradle 文件的所有依赖项的 uber jar,如下所示。我仍然 运行 想念 类。

以下是其中一个错误:

错误:包org.jfrog.artifactory.client.ArtifactoryClient不存在 导入 org.jfrog.artifactory.client.ArtifactoryClient.ProxyConfig;

在我使用的 Netbeans IDE 中,我可以在一个 jar 中展开每个包并查看其中的 类。我在 org.jfrog.artifactory.client 包下没有看到任何东西。即st运行ge.

我的build.gradle:

group 'org.jftog.example'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.13

repositories {
    jcenter()
}

dependencies {
    compile 'org.apache.commons:commons-collections4:4.4'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    testImplementation group: 'junit', name: 'junit', version: '4.12'
    implementation 'org.jfrog.artifactory.client:artifactory-java-client-services:+'
    implementation 'org.jfrog.artifactory.client:artifactory-java-client-api:+'
}

jar {
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

2020 年 11 月 10 日更新:

我发现 artifactory sdk 发生了变化,我使用的是过时的 类。我在我的 类 中修复了这些引用以使用较新的 SDK 对应项并且问题消失了。

我最终使用以下 gradle 文件来构建我需要的一切:

group 'artifactory-client-sdk'
version ''

apply plugin: 'java'

sourceCompatibility = 1.8
buildDir="${rootDir}/../out/artifactory_client_sdk"
def signbridge_lib="${rootDir}/../libs"
jar.baseName = 'artifactory-client-sdk'
repositories {
    jcenter()
}

dependencies {
    implementation 'ch.qos.logback:logback-classic:1.2.3'
    testImplementation group: 'junit', name: 'junit', version: '4.12'
    implementation 'org.jfrog.artifactory.client:artifactory-java-client-services:+'
    implementation 'org.jfrog.artifactory.client:artifactory-java-client-api:+'
}

jar {
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA','**/org/jfrog/example'
}

task copyJar(type: Copy) {
    from jar // copies output of file produced from jar task
    into "${signbridge_lib}"
}

build.finalizedBy copyJar

非常感谢 Dror 的指点!

A​​rtifactory Java 客户端的源代码可以在 jfrog/artifactory-client-java GitHub 存储库中找到。
services module used to be built as an uber jar containing 3rd party dependencies. On Oct 2019 the build has changed 创建一个薄罐子而不是超级罐子。
要解决您的问题,您可以:

  • 在构建应用程序时包含服务模块的第 3 方依赖项
  • 还原 build.gradle 中的更改并继续构建 uber jar

您可以使用 jcenter where is it being published by JFrog. The artifacts are published together with Maven .pom 文件中的工件,而不是从源代码构建,其中包含所有必需的第 3 方依赖项(所有这些都在 jcenter 中可用)。
此外,还有一个示例 Github project 展示了如何使用 Maven 或 Gradle.

使用客户端库