【问题标题】:JFrog REST api client app fails to build with missing org.apache.commons.* packagesJFrog REST api 客户端应用程序无法构建缺少 org.apache.commons.* 包
【发布时间】:2020-11-03 22:21:14
【问题描述】:

我们有一个使用 2017 版 JFrog Java 服务 jar 构建的 Java 应用程序。今天我正在尝试使用最新的 jfrog lib 重建它。我看到新的服务 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 复制到我的项目 lib 文件夹中

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

Dror 回复后于 11/6/20 更新如下:

我将构建策略更改为指向 jcenter 以下载并创建带有 gradle 文件的所有依赖项的 uber jar,如下所示。我仍然遇到缺课。

以下是其中一个错误:

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

在我使用的 Netbeans IDE 中,我可以在 jar 中展开每个包并查看其中的类。我在 org.jfrog.artifactory.client 包下看不到任何内容。这很奇怪。

我的 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 日更新:

我发现工件 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 的精彩指点!

【问题讨论】:

  • 你能分享一个你遇到的编译错误的例子吗?是编译错误还是缺少第 3 方依赖项(apache commons)的问题?
  • 缺少 Apache commons 包。旧的超级罐子里有一切。最新版好像不行

标签: artifactory apache-commons jfrog


【解决方案1】:

Artifactory Java 客户端的源代码可以在jfrog/artifactory-client-java GitHub 存储库中找到。
services 模块曾经被构建为包含 3rd 方依赖项的 uber jar。在 2019 年 10 月,该版本有 changed 来创建一个薄罐而不是超级罐。
要解决您的问题,您可以:

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

您可以从jcenter 使用JFrog 发布的工件,而不是从源代码构建。工件与 Maven .pom 文件一起发布,其中包含所有必需的第 3 方依赖项(所有这些都在 jcenter 中可用)。
此外,还有一个示例Github project,展示了如何使用 Maven 或 Gradle 使用客户端库。

【讨论】:

  • 它们是因为 JFrog 现在没有任何依赖关系而被删除,还是您希望客户端应用程序自己添加这些依赖关系?在第二种情况下,JFrog 类将开始抛出类未找到异常。我不希望这是这种情况。如果是,那么为什么有人不记录这些依赖关系是没有意义的。
  • 我添加了 jar 依赖项并且能够解决这些问题。我看到 org.jfrog.artifactory.client.ArtifactoryClient* 缺少类编译错误。我该如何解决这种依赖关系?另外,我有一些代码一直在使用旧 jar 中的 ch.qos.logback.classic。我也没有看到。
  • @videoguy 我更新了答案,提供了有关如何查找/使用第 3 方依赖项的更多详细信息
  • 感谢 Dror!我正在使用带有基于 Ant 的项目文件系统的 Netbeans IDE 来构建它。这就是为什么我正在寻找最终的 jar 作为 lib 依赖项包含在 Netbeans 中。
  • 我使用了示例项目而不是源代码包。修改了 gradle 构建以创建 uber jar。修复了 apache 包问题。但我仍然看到缺少 Artifactory 参考。错误:包 org.jfrog.artifactory.client.ArtifactoryClient 不存在导入 org.jfrog.artifactory.client.ArtifactoryClient.ProxyConfig;
猜你喜欢
  • 1970-01-01
  • 2021-06-07
  • 2015-04-23
  • 2021-01-27
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多