众所周知,有的项目是完全建立在内网的离线模式的。最近第一次接触这种离线模式的项目,记录一下遇到的问题:

Maven offline model

由于内网要求,所以项目是运行在虚拟机上的,开发环境在虚拟机上不能联网,所以所有项目都是需要重新下载下来。在配置pom.xml的时候出现了问题,idea一直报一个奇怪的错误:

Cannot access maven-default-http-blocker (http://0.0.0.0/) in offline mode

最开始按照网上指示,开启了maven的offline模式,但是还是不能解决问题,后来发现是Maven的版本问题

这是因为我使用的idea默认的Bundled(Maven3),这里的maven版本是3.8以上太高了,在高版本的maven的setting.xml文件中有一个镜像:

首先,思考内部类是怎么运行的。我们知道在内部类编译成功后,它会产生一个新的class文件。

该class文件仅仅只保留了对外部类的引用。

举个例子,当外部类传入的参数需要被内部类调用时,直接看起来好像就是被直接调用的:

1
2
3
4
5
6
7
<mirror>
<id>maven-default-http-blockerid>
<mirrorOf>external:http:*mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.name>
<url>http://0.0.0.0/url>
<blocked>trueblocked>
<mirror>

这个东西是maven默认阻止外部 HTTP 存储库,简单的处理就是把它注释掉。如果用户不主动注释掉maven-default-http-blocker配置,这会导致IDEA在使用捆绑的maven时出现持久性问题。

这个其实有点不方便,设置这个主要原因是使用HTTP协议下载依赖,可能会导致中间人攻击。所以Maven 3.8.1就禁止了所有HTTP协议的Maven仓库。

所以,解决方案主要就是两种:

  1. 降低版本
  2. 当idea加载外部配置文件时会优先加载安装目录下\plugins\maven\lib\maven3\conf文件夹内的settings.xml,注释该文件中maven-default-http-blocker配置

idea SVN导入项目

项目是运行于神奇的SVN而不是git上的,当尝试从svn导入项目的时候,类似git,我们从idea File -> new -> project from version control打开界面:

内网项目踩坑记录

可以看到上方有一个version control的选项,这里的下拉菜单可以选择subversion(即SVN).

选择之后输入公司SVN项目的url,就会自动生成对应的文件夹,里面有项目代码,测试代码,包这些。但是第一次运行SVN的时候往往会出问题,这里会报错:

Cannot run program “svn”: CreateProcess error=2

原因是SVN需要使用命令行工具,如果本地没有SVN的命令行工具,则导致出错。

所以重新打开你安装SVN的msi文件,选择modify (点击左边的图片而不是文字),安装command line client tools就OK了。

内网项目