Artifactory JFrog REST api客户端应用无法生成缺少org.apache.commons.*包的应用程序
我们有一个Java应用程序,它是使用2017版JFrog Java services jar构建的。今天,我尝试使用最新的jfrog库重建它。我看到新的服务jar中没有org.apache.*包 这就是我如何构建jfrog服务jar的Artifactory JFrog REST api客户端应用无法生成缺少org.apache.commons.*包的应用程序,artifactory,apache-commons,jfrog,Artifactory,Apache Commons,Jfrog,我们有一个Java应用程序,它是使用2017版JFrog Java services jar构建的。今天,我尝试使用最新的jfrog库重建它。我看到新的服务jar中没有org.apache.*包 这就是我如何构建jfrog服务jar的 下载了2.8.6源代码zip并对其进行了扩展 将gradle升级到最新版本并运行“gradle clean build-x test-x javadoc” 然后仅将services/build/lib/*services-2.8.6.jar复制到我的项目库文件夹中
我怎样才能造一个这样的 在以下Dror响应后于2020年11月6日更新: 我改变了构建策略,指向jcenter下载并创建uber jar,其中包含gradle文件的所有依赖项,如下所示。我仍在逃课 以下是其中一个错误: 错误:包org.jfrog.artifactory.client.ArtifactoryClient不存在 导入org.jfrog.artifactory.client.ArtifactoryClient.ProxyConfig强> 在我正在使用的Netbeans IDE中,我可以在一个jar中展开每个包并查看其中的类。我在org.jfrog.artifactory.client包下没有看到任何内容。这很奇怪 我的身材。格雷德尔:
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日更新:
我发现ArtifactorySDK发生了变化,我使用的是陈旧的类。我在我的类中修复了这些引用,以使用更新的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给我们的精彩指点 可以在GitHub存储库中找到Artifactory Java客户端的源代码。
该模块过去构建为一个包含第三方依赖项的uber jar。2019年10月,构建必须创建一个瘦罐子而不是uber罐子。
要解决您的问题,您可以:
- 在构建应用程序时包括服务模块的第三方依赖项
- 恢复build.gradle中的更改并继续构建uber jar
此外,还有一个示例显示如何使用Maven或Gradle使用客户端库。您能分享一个编译错误的示例吗?这是编译错误还是缺少第三方依赖项(apache commons)的问题?缺少apache commons包。旧的优步罐里什么都有。最新版本似乎不起作用。是否因为JFrog现在没有任何依赖项而将其删除,或者您希望客户端应用程序自己添加这些依赖项?在第二种情况下,JFrog类将开始抛出类not found异常。我不希望这样。如果是的话,为什么有人不记录这些依赖关系是没有意义的。我添加了jar依赖关系,并且能够解决这些问题。我看到org.jfrog.artifactory.client.ArtifactoryClient*缺少类编译错误。如何解决这种依赖关系?另外,我还有一些使用旧jar中的ch.qos.logback.classic的代码。我也看不到它们。@videoguy我更新了答案,提供了有关如何查找/使用第三方依赖项的更多详细信息!我正在使用Netbeans IDE及其基于Ant的项目文件系统构建它。这就是为什么我希望最终的jar作为lib依赖项包含在Netbeans中。修改了gradle构建以创建uber jar。这解决了apache软件包的问题。但我仍然看到缺少的人工引用。错误:包org.jfrog.artifactory.client.ArtifactoryClient不存在导入org.jfrog.artifactory.client.ArtifactoryClient.ProxyConfig;