等级不通过人工制品来解决Tika的传递依赖性

时间:2017-07-26 14:02:11

标签: gradle artifactory apache-tika

我正在努力发布JesterJ的第一个真正有用的版本,并且已经遇到了依赖解析的重大问题。 Jfrog的善良人士已经足够好,能够通过免费访问Artifactory Pro来识别我的开源工作,因此我使用它来检查和验证我的传递依赖项的许可证。我使用Apache 2.0许可证,因此我尝试使用Apache's own standard来遵守它的2.0许可证。然而,其中一个依赖项,Apache Tika 1.12,有一些"类别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中有关。

我尝试过的事情 -

  1. 转到gradle 4.0(无变化)
  2. 在JCenter(无变化)之前将MavenCentral添加到我的libs-release虚拟存储库
  3. 我注意到Artifactory中的maven-central-cache存储库不会缓存1.16的pom,但会将pom缓存为1.12。如果有人能告诉我如何获得神器来缓存/服务pom或让gradle正确地请求它(不确定哪个是问题)那将是有帮助的。

    此处可以看到完整的构建文件配置: https://github.com/nsoft/jesterj/blob/273c99a0bceccda7f0933299c699232fec1079ad/code/ingest/build.gradle

    此处匿名访问jetsterj artifactory: https://jesterj.jfrog.io/jesterj/webapp/#/home

1 个答案:

答案 0 :(得分:2)

最后我不得不向JFrog提交一个错误。他们为我解决了。

事实证明问题出在我启用的设置上。有一个设置可以使用404而不是401来隐藏未经授权的资源(防止人们在周围钓鱼以查看您没有泄露的内容)。这听起来更加安全,所以我启用了它。我相信一切都很好,直到我也启用了匿名访问...这种组合打破了gradle的依赖性解析。 JFrog支持称maven(可能还有gradle)总是首先尝试匿名访问。获得404后,它可能假设资源(pom.xml)不存在。没有pom,没有依赖列表。

Tika 1.12唯一特别之处在于我在启用匿名访问之前已经加载了它。

所以解决方法是取消选中此设置:

screenshot of setting

相关问题