【maven】 【FQA】mvn [ERROR] Plugin maven-resources-plugin:2.x Cannot resolve

149 阅读4分钟

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 取消打勾

image.png

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 仓库管理。

image.png

    <?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.hostdatasource.slave.port={datasource.slave.host} datasource.slave.port={datasource.slave.port} datasource.slave.db=datasource.slave.dbdatasource.slave.username={datasource.slave.db} datasource.slave.username={datasource.slave.username} datasource.slave.password=datasource.slave.passworddatasource.slave.maxconn={datasource.slave.password} datasource.slave.maxconn={datasource.slave.maxconn} datasource.slave.minconn=${datasource.slave.minconn}

datasource.master.host=datasource.master.hostdatasource.master.port={datasource.master.host} datasource.master.port={datasource.master.port} datasource.master.db=datasource.master.dbdatasource.master.username={datasource.master.db} datasource.master.username={datasource.master.username} datasource.master.password=datasource.master.passworddatasource.master.maxconn={datasource.master.password} datasource.master.maxconn={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>user.home/antxconfig/{user.home}/antx-config/{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