0

我们有一个使用 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 回复后于 20 年 11 月 6 日更新:

我将构建策略更改为指向 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 的精彩指点!

4

1 回答 1

1

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

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

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

于 2020-11-04T22:20:25.760 回答