Maven 报错:Cannot resolve plugin *org.apache.maven.plugins:maven-resources-plugin:2.6
Maven 报错:Cannot resolve plugin *org.apache.maven.plugins:maven-resources-plugin:2.6 解决方案: Work offline 取消打勾
mvn命令参数
mvn -v, --version 显示版本信息; mvn -V, --show-version 显示版本信息后继续执行Maven其他目标; mvn -h, --help 显示帮助信息; mvn -B, --batch-mode 在非交互(批处理)模式下运行(该模式下,当Mven需要输入时,它不会停下来接受用户的输入,而是使用合理的默认值); mvn clean -Dmaven.test.skip=true package 打包 mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip
-Dmaven.test.skip=true, 不执行测试用例,也不编译测试用例类。
mvn install -Dautoconfig.skip 避免AutoConfig,只需要一个额外的命令行参数:
mvn -e, --errors 控制Maven的日志级别,产生执行错误相关消息;
mvn -X, --debug 控制Maven的日志级别,产生执行调试信息;
mvn -q, --quiet 控制Maven的日志级别,仅仅显示错误;
mvn -Pxxx 激活 id 为 xxx的profile (如有多个,用逗号隔开);
mvn -Dxxx=yyy 指定java全局属性;
mvn -o , --offline 运行offline模式,不联网更新依赖;
mvn -N, --non-recursive 仅在当前项目模块执行命令,不构建子模块;
mvn -pl, --module_name 在指定模块上执行命令;
mvn -ff, --fail-fast 遇到构建失败就直接退出;
mvn -fn, --fail-never 无论项目结果如何,构建从不失败;
mvn -fae, --fail-at-end 仅影响构建结果,允许不受影响的构建继续;
mvn -C, --strict-checksums 如果校验码不匹配的话,构建失败;
mvn -c, --lax-checksums 如果校验码不匹配的话,产生告警;
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖);
mvn -npu, --no-plugin-updates 对任何相关的注册插件,不进行最新检查(使用该选项使Maven表现出稳定行为,该稳定行为基于本地仓库当前可用的所有插件版本);
mvn -cpu, --check-plugin-updates 对任何相关的注册插件,强制进行最新检查(即使项目POM里明确规定了Maven插件版本,还是会强制更新);
mvn -up, --update-plugins [mvn -cpu]的同义词;
mvn -f, --file 强制使用备用的POM文件;
mvn -s, --settings 用户配置文件的备用路径;
mvn -gs, --global-settings 全局配置文件的备用路径;
mvn -emp, --encrypt-master-password 加密主安全密码,存储到Maven settings文件里;
mvn -ep, --encrypt-password 加密服务器密码,存储到Maven settings文件里;
mvn -npr, --no-plugin-registry 对插件版本不使用~/.m2/plugin-registry.xml(插件注册表)里的配置;
AutoConfig常用命令
AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用。
不用的环境所使用的数据库、缓存的配置是不同的。
我们完全可以手工修改不用环境的配置,当然这种做法是非常耗费精力的。
maven 为我们提供了 profile 机制,但我在工作中还觉得它不够好,因为它把我的数据库用户名和密码配置在 pom.xml 文件中,pom 文件又被 git 所管理,其实就暴露了数据库连接的配置。
于是我找到了一款非常好用的 maven 插件,实现不同环境使用不同的配置进行打包,同时又不会将 pom.xml 文件纳入 git 仓库管理。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<group>
<property name="datasource.slave.host" defaultValue="127.0.0.1" description="datasource slave host" />
<property name="datasource.slave.port" defaultValue="3306" description="datasource slave port" />
<property name="datasource.slave.db" defaultValue="read" description="datasource slave db" />
<property name="datasource.slave.username" defaultValue="root" description="datasource slave username" />
<property name="datasource.slave.password" defaultValue="123456" description=" datasource slave password" />
<property name="datasource.slave.maxconn" defaultValue="50" description="datasource slave maxconn" />
<property name="datasource.slave.minconn" defaultValue="25" description="datasource slave minconn" />
</group>
<group>
<property name="datasource.master.host" defaultValue="127.0.0.1" description="datasource master host" />
<property name="datasource.master.port" defaultValue="3306" description="datasource master port" />
<property name="datasource.master.db" defaultValue="read" description="datasource master db" />
<property name="datasource.master.username" defaultValue="root" description="datasource master username" />
<property name="datasource.master.password" defaultValue="123456" description="datasource master password" />
<property name="datasource.master.maxconn" defaultValue="50" description="datasource master maxconn" />
<property name="datasource.master.minconn" defaultValue="25" description="datasource master minconn" />
</group>
<script>
<generate template="application.properties.vm" destfile="WEB-INF/classes/application.properties" />
</script>
</config>
注意:上面的 script 子标签,将根据 application.properties.vm 模板文件的内容去生成打包好的文件中的 WEB-INF/classes/application.properties 文件。 下面我们编写 application.properties.vm 模板文件。
4、编写 application.properties.vm 模板文件
datasource.slave.host={datasource.slave.port} datasource.slave.db={datasource.slave.username} datasource.slave.password={datasource.slave.maxconn} datasource.slave.minconn=${datasource.slave.minconn}
datasource.master.host={datasource.master.port} datasource.master.db={datasource.master.username} datasource.master.password={datasource.master.maxconn} datasource.master.minconn=${datasource.master.minconn}
注意:这里的 ${datasource.slave.host} 应该和第 3 步的 auto-config.xml 文件中配置的 property 子节点 name 属性对应。
5、编写 pom.xml 文件引入 autoconfig 插件
(1)将该插件的 autoconfig 目标绑定到 maven 生命周期的 package 阶段
com.alibaba.citrus.tool autoconfig-maven-plugin 1.2 ${autoconfig.path}/${autoconfig.file} package autoconfig(2)为了使得配置更加灵活,我们配置属性 autoconfig.path 和 autoconfig.file
<autoconfig.path>{artifactId}/${devModel}</autoconfig.path> <autoconfig.file>antx.properties</autoconfig.file>
其中,${user.home} 是 maven 定义的系统属性,这里代表操作系统的宿主目录。
(3)下面定义 profile
dev dev antx.properties true<!-- 内测环境:内网 192.168.12.250 -->
<profile>
<id>beta</id>
<properties>
<devModel>beta</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile>
<!-- 集成测试环境:lyced -->
<profile>
<id>inte</id>
<properties>
<devModel>inte</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile>
<!-- 生产环境:17english -->
<profile>
<id>pro</id>
<properties>
<devModel>pro</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile>
以上就基本完成了 autoconfig 的配置。我们执行 maven 的 package 目标,就可以看到 autoconfig 生效了。
如果你使用 IntelliJ IDEA 作为开发工具,你可以使用下面的方式执行 maven 的 package 目标,带上 profile
注意事项: 1、文件夹要自己建立,autoconfig 插件不会帮你创建文件夹;
指定user properties 默认情况下,AutoConfig会按下列顺序查找user properties: 当前目录/antx.properties 当前用户HOME目录/antx.properties 但你可以指定一个自己的properties文件,用下面的命令: 运行AutoConfig独立可执行程序 autoconfig ...-u my.props 运行AutoConfigmaven插件 mvn ... -Dautoconfig.user Properties=my.props