java 强制maven为maven central使用HTTPS的正确方法是什么?

vqlkdk9b  于 2023-01-01  发布在  Java
关注(0)|答案(8)|浏览(242)

最近sonatype使maven central支持https(背景信息),现在我在pom.xml中添加了下面的代码片段,以强制在任何地方使用https:

<!-- force https -->
<repositories>
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

问题:

  • 这样就足够了吗?或者http还会在某处出现吗?
  • 这是正确的方法吗?正如我所读到的,我应该在settings.xml中这样做,但是其他使用我的(开源)项目的人不会使用安全连接。
    • 更新**

它看起来并不足够,例如,汇编插件仍然使用HTTP:

[INFO] --- maven-assembly-plugin:2.4:single (make-assembly) @ graphhopper-web ---
Downloading: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.jar
pkmbmrz7

pkmbmrz71#

你不需要把它一个一个放到所有的POM中,我建议把下面的代码添加到<profiles>节的MAVEN_HOME\conf\settings.xml中:

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>

这将始终是一个活动设置,除非您在POM中禁用/覆盖它。

ilmyapht

ilmyapht2#

这个问题已经在最新的maven 3.2.3中修复了!请参阅changelogs
所以安装maven 3.2.3并执行'rm-rf ~/. m2/repository/*'操作会有更好的效果;)

yquaqz18

yquaqz183#

您可以执行以下操作来强制maven使用单一回购协议:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>internal-repository</id>
      <name>Maven Repository Manager running on https://repo1.maven.org/maven2</name>
      <url>https://repo1.maven.org/maven2</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

您可以找到更多信息here
如果你愿意,你也可以对repo使用身份验证,信息是here

cyvaqqii

cyvaqqii4#

  • 添加下面的代码在您的pom.xml文件,而无需删除本地缓存,它的工作就像一个魅力 *
<distributionManagement>
       <repository>
          <id>Central Maven repository</id>
          <name>Central Maven repository https</name>
          <url>https://repo.maven.apache.org/maven2</url>
       </repository>
    </distributionManagement>

Maven更新终端

mvn -U clean install
7cwmlq89

7cwmlq895#

我也得到了同样的问题,并尝试了所有可能的方法,通过改变代理Map,但没有工作,最后我得到了解决方案,通过添加以下代码在setting.xml文件在.m2文件夹解决问题。
注意:在setting.xml中不启用代理对我来说工作得很好。

<settings>
<mirrors>
    <mirror>
        <id>internal-repository</id>
        <name>Maven Repository Manager running on https://repo1.maven.org/maven2</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>
pw9qyyiw

pw9qyyiw6#

基于@Karussell,您可以通过删除特定的包来修复它,而不是删除整个本地存储库
1.安装/更新maven至最新版本(〉= 3.2.3
1.转到本地存储库目录(~/.m2/repository
1.删除org.apache.maven下的所有软件包:第一个月
通过以上步骤,您将需要重新下载一些maven的软件包,但不需要重新下载整个软件包。

sq1bmfud

sq1bmfud7#

这个问题是在recent question中提出的。由于NetBeans在这里的现有答案中没有具体涉及,我添加了以下内容。

    • 简短回答**

升级Maven。您需要使用的URL(通过https协议)将在适当的最新版本的Maven中提供。对于较旧的NetBeans安装,这是最简单的解决方案。

    • 详细信息**

对于NetBeans 8.2(使用3.0.5版作为其捆绑的Maven版本),您可以将Maven至少升级到3.2.3版(或更高版本)。

    • 检查当前版本**

您可以按如下方式检查NetBeans正在使用的Maven版本:

  • 在主菜单中,转到工具〉选项。
  • 选择Java图标,然后选择其下方的Maven选项卡。

    • 安装升级版本**

下载并安装Maven-例如,从以下位置下载:
https://maven.apache.org/download.cgi
安装说明如下:
https://maven.apache.org/install.html

    • 更新NetBeans**

返回到上面屏幕截图中显示的NetBeans中的位置。
单击"Maven主页"下拉列表并选择"浏览..."。导航到安装新版本Maven的位置-例如:

E:\apache-maven-3.8.2-bin\apache-maven-3.8.2

现在,您应该可以看到NetBeans中反映的新版本。
单击确定。
最后,重试失败的构建命令。

cbjzeqam

cbjzeqam8#

要解决此错误,您可以添加新的存储库https://repo.maven.apache.org/maven2/

相关问题