习惯使用个人电脑开发,在公司也使用自己的电脑,而公司使用的开发环境一般为公司内网才能使用,比如maven仓库,npm仓库。在家里开发的时候就出现一些环境不一致的问题。
如下:
问题
想研究下Spring的内容呢,新建项目后发现包都导入不了。然后项目无法运行
方案
情况一
替换setting.xml,一般在公司,公司会让使用内部的settings.xml,在Idea中可以替换掉为原本自己备份的settings.xml
注意: 有时候公司的settings.xml指向的repository目录与默认的目录不一样,如果Local repository
指向的不是自己的本地源,也要修改下
情况二
一般修改下setting.xml是足够的,不过有时候可能出现一些其他问题,比如maven指向的源地址需要认证啊,在公司下载的库出现问题。
比如执行maven clean
的时候,出现这样
打开目录发现,这是因为之前的settings.xml不对,留下的脏数据
删除源下对应库的目录即可:
重新导入
setting.xml
setting.xml主要用来配置maven的执行方式,像pom.xml但是更像是全局的配置,对所有的项目都起作用。一般用来配置:
- 本地源的位置
- 服务器源位置
- 认证信息
有两个位置:
- ${maven.home}/conf/settings.xml 全局maven配置
- ${user.home}/.m2/settings.xml 用户maven配置
如果两个配置文件都存在,合并配置信息,同时以用户的配置文件为主。
基本结构
settings.xml的基本结构如下:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
localRepository: 本地仓库。该值表示构建系统本地仓库的路径。其默认值为${user.home}/.m2/repository
interactiveMode: Maven是否需要和用户交互以获得输入。如果Maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。
usePluginRegistry: Maven是否需要使用plugin-registry.xml文件来管理插件版本。如果设置为true,则在{user.home}/.m2下需要有一个plugin-registry.xml来对plugin的版本进行管理,默认为false。
offline:表示Maven是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为true,默认为false。如果电脑没网了,那么这个配置就很有用。
servers: pom.xml的 repositories 和 distributionManagement可以配置下载和上传源。但是有时候这些操作需要用户名和密码,而用户密码,不应该存在项目的pom.xml文件中,这就是servers需要配置的东西。
// 通过字面意思比较容易理解,不多说了
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${user.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
- profiles: 这个相比比pom.xml的配置简单了一些,内部可以配置activation, repositories, pluginRepositories 和 properties标签,理解为profile的个性化配置,单独定义并不会立即生效,需要通过满足条件来激活。 repositories 用来定义不同的profile使用什么类型的源,也很有用。
注意: 经常用到的配置一般是localRepository,servers,profiles, activeProfiles.
更多内容可以参考:Settings Reference
最后
做demo的时候一点小意外,不过maven作为常用的工程管理工具,熟悉其内部对我们还是很有帮助的。