Grade 不通过 artifactory 解决 Tika 的传递依赖
Grade not resolving transitive dependencies for Tika via artifactory
我正在努力发布 JesterJ and have hit a major snag with dependency resolution. The kind folks at Jfrog have been good enough to recognize my open source efforts with free access to Artifactory Pro and so I am using it to inspect and validate the licenses of my transitive dependencies. I use an Apache 2.0 license so I am attempting to use Apache's own standard 的第一个真正有用的版本,以符合它的 2.0 许可证。但是,其中一个依赖项 Apache Tika 1.12 有一些 "category X" 依赖项 1.12 是在我认为对该策略进行一些更改时发布的,而较新版本的 Tika 已经纠正了这些依赖项问题。
合乎逻辑的解决方案是升级我的 Tika 依赖项。不幸的是,这并不顺利。当我将 Tika 升级到 1.15(或现在的 1.16)时,我发现我不再从 tika-parsers 获得传递依赖,包括没有获得导致编译问题的 tika-core。这是 1.12 的 gradle 依赖项输出:
+--- org.apache.tika:tika-parsers:1.12
| +--- org.apache.tika:tika-core:1.12
| +--- org.gagravarr:vorbis-java-tika:0.6
| | \--- org.apache.tika:tika-core:1.5 -> 1.12
| +--- com.healthmarketscience.jackcess:jackcess:2.1.2
| | +--- commons-lang:commons-lang:2.6
| | \--- commons-logging:commons-logging:1.1.3 -> 1.2
(etc)
在我的 gradle 构建中,除了 2 之外什么都没有更改为 6 我得到:
+--- org.apache.tika:tika-parsers:1.16
+--- org.apache.solr:solr-solrj:5.5.0
| +--- commons-io:commons-io:2.4
| +--- org.apache.httpcomponents:httpclient:4.4.1
| | +--- org.apache.httpcomponents:httpcore:4.4.1
(etc)
这个问题出现在Artifactory/Gradle的交集处,可能与Tika在最近的版本中开始将他们的pom文件包含在META-INF中有关。
我尝试过的东西 -
- 移动到 gradle 4.0(无变化)
- 在 JCenter 之前将 MavenCentral 添加到我的 libs-release 虚拟存储库(无变化)
我注意到 Artifactory 中的 maven-central-cache 存储库不会缓存 1.16 的 pom,但会缓存 1.12 的 pom。如果有人能告诉我如何让 artifactory 进入 cache/serve pom 或让 gradle 正确地请求它(不确定是哪个问题)那将会有所帮助。
在这里可以看到完整的构建文件配置:
https://github.com/nsoft/jesterj/blob/273c99a0bceccda7f0933299c699232fec1079ad/code/ingest/build.gradle
在这里匿名访问 jetsterj 神器:
https://jesterj.jfrog.io/jesterj/webapp/#/home
最后我不得不向 JFrog 提交错误。他们帮我解决了。
事实证明问题出在我启用的设置上。有一个设置可以使用 404 而不是 401 来隐藏未经授权的资源(防止人们四处钓鱼以查看您没有透露的内容)。这听起来隐约更安全,所以我启用了它。我相信一切都很好,直到我也启用了匿名访问...这个组合打破了 gradle 的依赖解析。 JFrog 支持说 Maven(可能还有 gradle)总是首先尝试匿名访问。收到 404 后,它可能会假设资源(pom.xml)不存在。没有 pom,没有依赖列表。
Tika 1.12 唯一特别之处在于我在启用匿名访问之前已经加载了它。
因此解决方法是取消选中此设置:
我正在努力发布 JesterJ and have hit a major snag with dependency resolution. The kind folks at Jfrog have been good enough to recognize my open source efforts with free access to Artifactory Pro and so I am using it to inspect and validate the licenses of my transitive dependencies. I use an Apache 2.0 license so I am attempting to use Apache's own standard 的第一个真正有用的版本,以符合它的 2.0 许可证。但是,其中一个依赖项 Apache Tika 1.12 有一些 "category X" 依赖项 1.12 是在我认为对该策略进行一些更改时发布的,而较新版本的 Tika 已经纠正了这些依赖项问题。
合乎逻辑的解决方案是升级我的 Tika 依赖项。不幸的是,这并不顺利。当我将 Tika 升级到 1.15(或现在的 1.16)时,我发现我不再从 tika-parsers 获得传递依赖,包括没有获得导致编译问题的 tika-core。这是 1.12 的 gradle 依赖项输出:
+--- org.apache.tika:tika-parsers:1.12
| +--- org.apache.tika:tika-core:1.12
| +--- org.gagravarr:vorbis-java-tika:0.6
| | \--- org.apache.tika:tika-core:1.5 -> 1.12
| +--- com.healthmarketscience.jackcess:jackcess:2.1.2
| | +--- commons-lang:commons-lang:2.6
| | \--- commons-logging:commons-logging:1.1.3 -> 1.2
(etc)
在我的 gradle 构建中,除了 2 之外什么都没有更改为 6 我得到:
+--- org.apache.tika:tika-parsers:1.16
+--- org.apache.solr:solr-solrj:5.5.0
| +--- commons-io:commons-io:2.4
| +--- org.apache.httpcomponents:httpclient:4.4.1
| | +--- org.apache.httpcomponents:httpcore:4.4.1
(etc)
这个问题出现在Artifactory/Gradle的交集处,可能与Tika在最近的版本中开始将他们的pom文件包含在META-INF中有关。
我尝试过的东西 -
- 移动到 gradle 4.0(无变化)
- 在 JCenter 之前将 MavenCentral 添加到我的 libs-release 虚拟存储库(无变化)
我注意到 Artifactory 中的 maven-central-cache 存储库不会缓存 1.16 的 pom,但会缓存 1.12 的 pom。如果有人能告诉我如何让 artifactory 进入 cache/serve pom 或让 gradle 正确地请求它(不确定是哪个问题)那将会有所帮助。
在这里可以看到完整的构建文件配置: https://github.com/nsoft/jesterj/blob/273c99a0bceccda7f0933299c699232fec1079ad/code/ingest/build.gradle
在这里匿名访问 jetsterj 神器: https://jesterj.jfrog.io/jesterj/webapp/#/home
最后我不得不向 JFrog 提交错误。他们帮我解决了。
事实证明问题出在我启用的设置上。有一个设置可以使用 404 而不是 401 来隐藏未经授权的资源(防止人们四处钓鱼以查看您没有透露的内容)。这听起来隐约更安全,所以我启用了它。我相信一切都很好,直到我也启用了匿名访问...这个组合打破了 gradle 的依赖解析。 JFrog 支持说 Maven(可能还有 gradle)总是首先尝试匿名访问。收到 404 后,它可能会假设资源(pom.xml)不存在。没有 pom,没有依赖列表。
Tika 1.12 唯一特别之处在于我在启用匿名访问之前已经加载了它。
因此解决方法是取消选中此设置: