从 3.8.1 版开始,Maven 默认阻止外部 HTTP 存储库(请参阅https://maven.apache.org/docs/3.8.1/release-notes.html)
有没有办法禁用它或从这个规则中免除存储库?
Seb*_*ebu 47
我通过检查负责默认 HTTP 阻塞的 Maven git 存储库中的提交找到了一个解决方案:https : //github.com/apache/maven/commit/907d53ad3264718f66ff15e1363d76b07dd0c05f
我的解决方案如下:
在 Maven 设置(位于${maven.home}/conf/settings.xml或${user.home}/.m2/settings.xml)中,必须删除以下条目:
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
Run Code Online (Sandbox Code Playgroud)
如果您在一个项目中工作并且无法确保 Maven 设置总是这样,例如因为您与其他人共享代码或希望使用 CI/CD 进行自动化测试,您可以执行以下操作:.mvn在项目中添加一个命名的目录. 在.mvn目录中,添加一个以maven.config内容命名的文件--settings ./.mvn/local-settings.xml。在.mvn目录中,添加一个名为local-settings.xml. 该文件应如下所示:
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>my-repository-http-unblocker</id>
<mirrorOf>my-blocked-http-repository</mirrorOf>
<name></name>
<url>http://........</url>
<blocked>false</blocked>
</mirror>
</mirrors>
</settings>
Run Code Online (Sandbox Code Playgroud)
在<mirrorOf>标签中的哪里需要指定id被阻止的仓库的,在<url>标签中再次指定仓库的原始url。您需要为您拥有的每个被阻止的存储库创建此解除阻止程序镜像。
例子:
如果您在 中定义了以下 HTTP 存储库pom.xml:
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://my-url/libs-release</url>
</repository>
<repository>
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://my-url/libs-snapshot</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
然后你需要在.mvn/local-settings.xml:
<mirrors>
<mirror>
<id>release-http-unblocker</id>
<mirrorOf>central</mirrorOf>
<name></name>
<url>http://my-url/libs-release</url>
<blocked>false</blocked>
</mirror>
<mirror>
<id>snapshot-http-unblocker</id>
<mirrorOf>snapshots</mirrorOf>
<name></name>
<url>http://my-url/libs-snapshot</url>
<blocked>false</blocked>
</mirror>
</mirrors>
Run Code Online (Sandbox Code Playgroud)
我希望我的工作可以帮助其他偶然发现这一点的人。但是,如果您有更优雅或更好的解决方案,请分享!
小智 17
在 macOS Monterey 中,使用 IntelliJ Ultimate 2021.3(及更高版本),系统中未安装 Maven,并使用 Maven 作为 IntelliJ 内的插件,我在路径中找到了“settings.xml”文件:
${user.home}/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.5744.223/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml
Run Code Online (Sandbox Code Playgroud)
注意: 以上路径是使用 JetBrains Toolbox App 安装 IntelliJ 时的路径,显示的版本号(213.5744.223)可以推迟,如果您有其他版本,请在文件路径中验证。
使用您喜欢的编辑器打开“settings.xml”文件,然后注释以下行:
<!--<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>-->
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
mut*_*huh 14
另一个可能的解决方案/解决方法是通过在 Maven 的“主”文件部分(在我的情况下)注释掉maven-default-http-blocker镜像来覆盖新的默认 http 阻止行为;<mirrors>settings.xml/opt/maven/conf
<!--mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>false</blocked>
</mirror-->
Run Code Online (Sandbox Code Playgroud)
PS 解除阻止所有不安全的 http 存储库是否是一个好主意是另一回事。
就我而言,我只是添加了一个带有 id 的虚拟镜像maven-default-http-blocker来覆盖现有镜像。这将禁用所有存储库的 HTTP 阻止。
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>dummy</mirrorOf>
<name>Dummy mirror to override default blocking mirror that blocks http</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
</mirrors>
</settings>
Run Code Online (Sandbox Code Playgroud)
"http"我通过简单地替换"https".xml 文件(在我的例子中为 pom.xml )中解决了这个问题。这解决了我的错误。
小智 6
要取消阻止特定存储库,您可以在设置中定义它的虚拟镜像,方法是添加<mirror>具有相同的url,其<mirrorOf>值与存储库的id. 无需更改任何其他内容即可使其发挥作用。
例如:
如果您的存储库 ID 是team-internal-repo,那么添加到您的镜像~/.m2/settings.xml可能如下所示:
<settings>
...
<!-- Add a mirror. -->
<mirrors>
<mirror>
<id>team-internal-repo-mirror</id>
<mirrorOf>team-internal-repo</mirrorOf> <!-- Must match repository id. -->
<name>Dummy mirror to unblock the team repo server</name>
<url>http://insecure-internal-server/repository/team-repo/</url>
<!-- <blocked>false</blocked> --> <!-- This is not needed, the mirror is unblocked by default. -->
</mirror>
</mirrors>
<!-- Existing profile does not need to change. -->
<profiles>
<profile>
<id>default_profile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>team-internal-repo</id>
<name>Dev Team Internal Artifacts</name>
<url>http://insecure-internal-server/repository/team-repo/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
...
</profile>
</profiles>
</settings>
Run Code Online (Sandbox Code Playgroud)
<blocked>这里不需要标签。其他用户评论说该标签破坏了旧版本的 Maven。我测试了带有和不带有此标签的 http 存储库,并且它是双向的。(使用maven 3.8.2测试。)
取消阻止一个或多个显式存储库比普遍取消阻止所有 http 存储库要好。这样做可能是一个坏主意:
/opt/apache-maven-3.8.1不是您自己的设置文件~/.m2)可能会在更新或重新安装未来版本的 Maven 时造成麻烦。如果该文件被覆盖,您的存储库可能会突然再次被阻止。小智 6
使用捆绑的 Maven (3.8.1) 的 macOS Monterey 12.3.1 和 IntelliJ 2022.1 也存在同样的问题。该解决方案与 MrBitwise 提出的解决方案类似,但设置文件具有不同的路径(它是嵌入在应用程序内容文件夹中的路径):
/Applications/IntelliJ\ IDEA\ CE.app/Contents/plugins/maven/lib/maven3/conf/settings.xml
Run Code Online (Sandbox Code Playgroud)
然后我评论了下面的代码:
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
Run Code Online (Sandbox Code Playgroud)
您应该只在您的 http 存储库中添加一个镜像,该镜像允许在您的 Maven 设置中使用 http。您不应该消除所有存储库的默认 maven 行为。然后告诉您的 DevOps 团队使用 https!
在.m2/settings.xml:
<mirrors>
<mirror>
<id>my-repo-mirror</id>
<name>My Repo HTTP Mirror</name>
<url>http://url-to.my/repo</url>
<mirrorOf>my-repo</mirrorOf>
<blocked>false</blocked>
</mirror>
</mirrors>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21042 次 |
| 最近记录: |