【问题标题】:Update log4j in Grails 2.4 results in "Could not transfer artifact from/to grailsCentral"在 Grails 2.4 中更新 log4j 会导致“无法将工件从/到 grailsCentral 传输”
【发布时间】:2022-01-19 01:29:20
【问题描述】:

我需要在我的 Grails 2.4.2 安装中将 log4j 更新到最新版本。

我在 BuildConfig.groovy 中指出这一点

dependencies {
    ... 
    compile 'org.apache.logging.log4j:log4j:2.17.1'
}

而且,存储库部分是这样的:

repositories {
    inherits true // Whether to inherit repository definitions from plugins

    grailsPlugins()
    grailsHome()
    mavenLocal()
    grailsCentral()
    //mavenCentral()
    
    mavenRepo 'https://repo1.maven.org/maven2/'
    mavenRepo 'https://repo.maven.apache.org/maven2/'
    mavenRepo 'https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j'
    //uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
    //mavenRepo "http://repository.codehaus.org"
    //mavenRepo "http://download.java.net/maven/2/"
    //mavenRepo "http://repository.jboss.com/maven2/"        
}

我已经尝试取消注释所有已评论的存储库。并且我还添加了 Maven 页面中指示的存储库(如图所示)。

每次我尝试构建项目时,都会失败并出现以下错误:

Error |
Resolve error obtaining dependencies: Could not transfer artifact 
org.apache.logging.log4j:log4j:jar:2.17.1 from/to grailsCentral 
(http://repo.grails.org/grails/plugins): Permanent Redirect (308) (Use --stacktrace 
to see the full trace)

我第一次尝试构建时,工件已下载,然后失败并出现上述错误。

运行grails dependency-report --stacktrace 会产生以下结果:

Resolve error obtaining dependencies: Could not transfer artifact org.apache.logging.log4j:log4j:jar:2.17.1 from/to grailsCentral (http://repo.grails.org/grails/plugins): Permanent Redirect (308) (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
org.eclipse.aether.resolution.DependencyResolutionException: Could not transfer artifact org.apache.logging.log4j:log4j:jar:2.17.1 from/to grailsCentral (http://repo.grails.org/grails/plugins): Permanent Redirect (308)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:384)
    at grails.util.BuildSettings.doResolve(BuildSettings.groovy:514)
    at grails.util.BuildSettings.doResolve(BuildSettings.groovy)
    at grails.util.BuildSettings$_getDefaultTestDependencies_closure16.doCall(BuildSettings.groovy:588)
    at grails.util.BuildSettings$_getDefaultTestDependencies_closure16.doCall(BuildSettings.groovy)
    at grails.util.BuildSettings.getDefaultTestDependencies(BuildSettings.groovy:582)
    at grails.util.BuildSettings.getTestDependencies(BuildSettings.groovy:563)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.logging.log4j:log4j:jar:2.17.1 from/to grailsCentral (http://repo.grails.org/grails/plugins): Permanent Redirect (308)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:367)
    ... 6 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.logging.log4j:log4j:jar:2.17.1 from/to grailsCentral (http://repo.grails.org/grails/plugins): Permanent Redirect (308)
    at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:43)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:581)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:249)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:520)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:421)
    ... 8 more
Caused by: org.apache.http.client.HttpResponseException: Permanent Redirect (308)
    at org.eclipse.aether.transport.http.HttpTransporter.handleStatus(HttpTransporter.java:458)
    at org.eclipse.aether.transport.http.HttpTransporter.execute(HttpTransporter.java:283)
    at org.eclipse.aether.transport.http.HttpTransporter.implGet(HttpTransporter.java:235)
    at org.eclipse.aether.spi.connector.transport.AbstractTransporter.get(AbstractTransporter.java:59)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:447)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:350)
    ... 13 more

有什么想法吗?也许 GrailsCentral 更改了 URL?

【问题讨论】:

  • FYI.. 最近有人问了几次类似的问题(部分原因是对哪些 log4j 版本受到最近的 log4j CVE 影响的误解)。其中之一是stackoverflow.com/questions/70349898/…
  • @JeffScottBrown 我知道我使用的版本不受最新CVE的影响,但无论如何我必须更新。我已经看过您提到的那个问题(以及许多其他问题),但目前这些问题对我都没有用。
  • 您正在尝试通过 http 解析需要通过 https 解析的工件。你能从repo.grails.org/grails/plugins解决吗?
  • “好的,那么,我该如何更改那个 URL?” - 您可以指定任何您喜欢的存储库 url,例如 mavenRepo "https://repo.grails.org/grails/plugins"。 “是否有一些文件解释了这些变化,并提供了适当的解决方案?” - 在grails.github.io/grails2-doc/2.4.2/guide/…有一些相关信息。
  • “我想我也应该评论 grailsCentral(),因为它不再有效” - 你可以删除它。除非重新配置服务器以支持 http,否则它将永远无法在该版本的 Grails 中工作,而且它不会。

标签: grails repository log4j2


【解决方案1】:

也许我误解了,但我正在使用:

compile "org.apache.logging.log4j:log4j-core:2.17.1"
compile "org.apache.logging.log4j:log4j-api:2.17.1"

这就是你想要做的吗?也许基本版本是它的简写,只是尝试一下

【讨论】:

  • 我认为这还不够。旧的 log4j 工件仍将在传递依赖图中(它们不会被自动驱逐,因为工件名称不同...log4jlog4j-core 等)
  • 谢谢,我能够用这些行编译,但正如@JeffScottBrown 所说,旧的工件仍在项目中。所以,现在我不知道我用的是新的还是旧的log4j,即使我用的是新的,我也不知道如何摆脱旧的log4j(可能不受最后一个CVE的影响,但它还有另一个漏洞)。框架应该让事情变得更容易......
  • “我不知道如何摆脱旧的 log4j” - 您可以在 BuildConfig.groovy 中表达排除项。
  • “框架应该让事情变得更容易” - 框架确实让事情变得更容易。我很抱歉这件事特别困难。部分问题在于构建解析引擎没有可靠的方法来自动驱逐旧库,因为它们的名称与新库不同。库提供相同能力的事实是不相关的。它们的名称不同的事实阻止了构建工具在这种特殊情况下为您解决问题。很抱歉给您带来麻烦。
  • @JeffScottBrown “您可以在 BuildConfig.groovy 中表达排除项”。我已经做到了,在文档中解释了如何为 log4j 精确地做到这一点,但它不起作用,它仍然出现在依赖关系报告中。我什至不认为我正在使用更新的 log4j 工件。这真的可能吗?我开始认为不是。我发布了另一个关于从依赖项中删除旧 log4j 的问题:stackoverflow.com/questions/70801702/…。但我敢打赌,如果我真的要删除它,该应用程序将无法构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 2021-08-30
相关资源
最近更新 更多