由于Maven中央存储库已移至https,无法构建Grails 2.3.7项目

7
我不能构建我的 2.3.7 grails 项目,因为 maven 中央仓库已经迁移到 https。我尝试了这篇帖子中的建议:请求 http://repo1.maven.org/maven2/ 返回 501 HTTPS Required 状态和一个 body,但是我仍然有问题,因为 maven 仓库被编码在框架 jars( grails-aether-2.3.7-sources.jar ) 中,类名为 org.codehaus.groovy.grails.resolve.maven.aether.config.RepositoriesConfinguration.groovy
RemoteRepository mavenCentral(Closure configurer = null) {
    final existing = repositories.find { ArtifactRepository ar -> ar.id == "mavenCentral" }
    if (!existing) {
        final repositoryBuilder = new RemoteRepository.Builder("mavenCentral", "default", "http://repo1.maven.org/maven2/")

        configureRepository(repositoryBuilder, configurer)
        final repository = repositoryBuilder.build()
        repositories << repository
        return repository
    }
    else {
        return existing
    }
}

此文件为只读文件。

我该如何解决这个问题?由于某些原因,我无法将项目迁移到新的Grails版本。 这是我得到的错误信息。

16:14:10 + /opt/grails-2.3.7/bin/grails --stacktrace clean 16:14:13 | 加载 Grails 2.3.7 16:14:17 | 配置 classpath 16:14:20 | 错误 无法解析依赖项: 读取 xalan:serializer:jar:2.7.1 的 artifact 描述失败(注意:堆栈跟踪已被过滤。使用 --verbose 命令查看完整的跟踪信息。) 16:14:20 org.eclipse.aether.resolution.ArtifactDescriptorException: 读取 xalan:serializer:jar:2.7.1 的 artifact 描述失败 at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:335) at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:217) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:466) at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:261) at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:317) at grails.util.BuildSettings.doResolve(BuildSettings.groovy:513) at grails.util.BuildSettings.doResolve(BuildSettings.groovy) at grails.util.BuildSettings$_getDefaultBuildDependencies_closure17.doCall(BuildSettings.groovy:774) at grails.util.BuildSettings$_getDefaultBuildDependencies_closure17.doCall(BuildSettings.groovy) at grails.util.BuildSettings.getDefaultBuildDependencies(BuildSettings.groovy:768) at grails.util.BuildSettings.getBuildDependencies(BuildSettings.groovy:673) 引起原因: org.eclipse.aether.resolution.ArtifactResolutionException: 无法从 mavenCentral (http://repo1.maven.org/maven2/ ) 转移 artifact xalan:serializer:pom:2.7.1:需要 HTTPS (501) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:460) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239) at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:320) ... 10 more 引起原因: org.eclipse.aether.transfer.ArtifactTransferException: 无法从 mavenCentral (http://repo1.maven.org/maven2/ ) 转移 artifact xalan:serializer:pom:2.7.1:需要 HTTPS (501) at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:43) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:342) at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:649) at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:247) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:536) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:437) ... 13 more 引起原因: org.apache.http.client.HttpResponseException: 需要 HTTPS (501) at org.eclipse.aether.transport.http.HttpTransporter.handleStatus(HttpTransporter.java:404) at org.eclipse.aether.transport.http.HttpTransporter.execute(HttpTransporter.java:298) at org.eclipse.aether.transport.http.HttpTransporter.implGet(HttpTransporter.java:250) at org.eclipse.aether.spi.connector.transport.AbstractTransporter.get(AbstractTransporter.java:59) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:418) at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:337) ... 18 more
2个回答

18

您需要在repositories下注释掉mavenCentral(),并按照此处建议添加相应的https url:

https://support.sonatype.com/hc/en-us/articles/360041287334

示例:

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

        grailsPlugins()
        grailsHome()
        mavenLocal()
        grailsCentral()

        //comment following line to prevent use of default http url
//        mavenCentral()

        //add following https counterparts
        mavenRepo 'https://repo1.maven.org/maven2/'
        mavenRepo 'https://repo.maven.apache.org/maven2/'
        //if by any chance you can't connect to https url use this insecure url
//      mavenRepo 'http://insecure.repo1.maven.org/maven2/'

        mavenRepo 'https://repo.spring.io/milestone'
    }

我尝试了这个方法,适用于grails 2.3.11和java 1.7.0_242版本,对我很有效。希望这可以帮到你。


3

我正在处理Grails 2.3.11,我只是添加了以下存储库并将任何其他外部存储库的URL更改为https:

repositories {
        mavenRepo "https://repo.grails.org/grails/core"

由于Java 8的TLS默认为1.2,我必须使用它来进行操作。遗憾的是,Grails 2.3.7不支持Java 8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接