【问题标题】:How to feed Antlr goal from local maven repository?如何从本地 Maven 存储库提供 Antlr 目标?
【发布时间】:2017-03-23 10:46:03
【问题描述】:

我正在尝试在离线机器上构建我的项目(这是一项要求)。我已经创建了本地 maven 存储库(它只是一个具有适当结构的文件夹)并成功构建了所有其他东西。

我按照以下方式进行:

1) 运行 gradle installl(这个 maven 插件的目标)

然后手动检查错误。如果我看到一些库没有找到,那么

2) 我把它的 maven 坐标从我的机器上手动复制到这台机器上。

除 Antlr 外,它都可以工作。我收到以下消息:

>gradle install
:generateGrammarSource

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all dependencies for configuration ':antlr'.
> Could not download antlr4.jar (org.antlr:antlr4:4.5)
   > Could not get resource 'http://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5/antlr4-4.5.jar'
      > Could not HEAD 'http://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5/antlr4-4.5.jar'.
         > Connection to http://repo.maven.apache.org refused

错误信息和往常一样,但这次将 jar 放入本地 maven 存储库并没有帮助。

如何克服?如何配置 Antlr 从本地 maven repo 中吃?

更新

文件存在于

 MYHOME\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4\4.5\af4a530e3cd7fa03636645d8077145eefac12907\antlr4-4.5.jar

MYHOME\.m2\repository\org\antlr\antlr4\4.5\antlr4-4.5.jar

在 maven 的情况下,伴随的文件也存在。

更新 2

注意上面写着

Could not resolve all dependencies for configuration ':antlr'.

并且Antlr依赖是由

添加的
antlr "org.antlr:antlr4:4.5" // use ANTLR version 4

即不是compile,也不是testCompile。可能这就是线索吗?可能是专门为antlr 配置配置存储库的一种方式吗?

更新 3

我正在写的那些我成功解决的案例:

Could not resolve all dependencies for configuration ':compile'.
> Could not resolve net.coobird:thumbnailator:0.4.8.
  Required by:
      com.cireca.overlaywidget:OverlayWidget:1.0-SNAPSHOT
   > Could not resolve net.coobird:thumbnailator:0.4.8.
      > Could not get resource 'https://repo1.maven.org/maven2/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8.pom'.
         > Could not GET 'https://repo1.maven.org/maven2/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8.pom'.
            > Connection to https://repo1.maven.org refused

更新 4

奇怪的东西。我注意到我的配置看起来很多余:

repositories {
    maven { url "http://repo.maven.apache.org/maven2" }
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "http://maven-eclipse.github.io/maven" }
    mavenLocal()
    flatDir {
        dirs 'lib'
    }

    maven { url "http://repo.maven.apache.org/maven2" }
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "http://maven-eclipse.github.io/maven" }

}

我把它改成了

repositories {
    mavenLocal()
    flatDir {
        dirs 'lib'
    }

    maven { url "http://repo.maven.apache.org/maven2" }
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "http://maven-eclipse.github.io/maven" }

}

然后它开始要求不同的图书馆。首先它声称

org.antlr:antlr4-runtime:4.5

我喂它成功了,但后来它声称

org.antlr:antlr-runtime:3.5.2

我不能喂它(同样的情况)。

【问题讨论】:

  • 在你的仓库中显示结构
  • 为什么会显示Could not download antlr4.jar (org.antlr:antlr4:4.5) 哪里应该尝试下载antlr4-4.5.jar
  • 我无法复制它,它可以在我的工作站上运行。
  • @Opal 你在哪里看到它无法下载antlr4.jar?无法下载org.antlr:antlr4:4.5,这是maven坐标。对应的 JAR 名称是antlr4-4.5.jar
  • 另外,请运行 gradle dependencies 并检查您定义的 antlr 依赖项是否未被其他版本替换。

标签: java maven gradle antlr4 offline-caching


【解决方案1】:

Maven 联系您在 settings.xml 中指定的存储库。如果您想避免使用外部存储库,则需要镜像所有内容。

实际上,在未连接到互联网的环境中工作的最佳方法是设置自己的 Nexus/Artifactory。填充存储库以供离线使用的最简单方法是将其连接到互联网一次,然后构建所有内容并断开连接。然后,您将拥有与您相关的所有内容的本地副本。

【讨论】:

  • 我正在镜像所有内容。但在 antlr 的情况下它不起作用。
【解决方案2】:

我已经从那台机器上完全删除了远程存储库引用(在此之前远程存储库的优先级较低)。

之后,Gradle 开始以显式本地路径的形式报告它遗漏的内容,我发现它缺少一些父 (?) 工件。

例如,对于 Guava,它是希望 com.google.guava:guava-parent,对于 antlr,它是 org.antlr:antlr-master。当配置中存在远程存储库时,不会报告这些名称。

如果有人能更详细地解释发生了什么,我会接受他/她的回答。

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2014-12-22
    • 2013-05-10
    • 2019-02-24
    • 2011-04-07
    • 2015-12-27
    • 2019-12-27
    • 1970-01-01
    相关资源
    最近更新 更多