需求
公司有私服,需要配置多个数据源,去不同的位置下载不同的包。
一些项目更新后,上传到私服上面,如何配置,直接打包上传到私服。
配置
多mirrors配置
<mirror>
<id>mirror</id>
<mirrorOf>!rdc-releases,!rdc-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>central</id>
<mirrorOf>aliyun</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>nexus-osc</id>
<mirrorOf>hangtian</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.hangtian123.com.cn/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>nexus-osc</id>
<mirrorOf>hangtian2</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.hangtian123.com.cn/nexus/content/repositories/ccservice/</url>
</mirror>
注意
-
该配置只是方便多个仓库进行切换而已,不能真正达到多仓库的效果。maven不管配置多少个仓库,只有第一个会生效的。如果第一个连接不上,才会到第二个。
-
mirrorOf 一定不能为* 否则下面就不能自动切换仓库去下载不同环境的jar包了,默认将*当做了中央仓库
-
id 一定不能为central 和上面一样的道理。central是中央仓库的id,如果配置上去,中央仓库就不能用了。
指定jdk版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
配置私服仓库
profile>
<id>private</id>
<repositories>
<repository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/131585-release-c3Uksj/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/131585-snapshot-m8BIJZ/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/131585-release-c3Uksj/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/131585-snapshot-m8BIJZ/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
配置公司私服
<profile>
<id>company</id>
<repositories>
<repository>
<id>ccservice</id>
<url>http://maven.hangtian123.com.cn/nexus/content/repositories/ccservice</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>hangtian</id>
<url>http://maven.hangtian123.com.cn/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>hangtian</id>
<url>http://maven.hangtian123.com.cn/nexus/content/repositories/ccservice/</url>
</pluginRepository>
</pluginRepositories>
</profile>
配置阿里云仓库
<profile>
<id>aliyun</id>
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
激活上面的配置
<activeProfiles>
<activeProfile>aliyun</activeProfile>
<activeProfile>private</activeProfile>
<activeProfile>company</activeProfile>
</activeProfiles>
代码形式实现多仓库地址配置
<pluginRepositories>
<!--私服-->
<pluginRepository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/131585-release-c3Uksj/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/131585-snapshot-m8BIJZ/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<!--公司-->
<pluginRepository>
<id>hangtian</id>
<url>http://maven.hangtian123.com.cn/nexus/content/repositories/ccservice/</url>
</pluginRepository>
<!--阿里云-->
<pluginRepository>
<id>aliyun</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<repositories>
<!--私服-->
<repository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/131585-release-c3Uksj/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/131585-snapshot-m8BIJZ/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!--公司-->
<repository>
<id>ccservice</id>
<url>http://maven.hangtian123.com.cn/nexus/content/repositories/ccservice</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>hangtian</id>
<url>http://maven.hangtian123.com.cn/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!--阿里云-->
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
配置私服打包身份校验
<servers>
<server>
<id>rdc-releases</id>
<username>GSt5gs</username>
<password>******</password>
</server>
<server>
<id>rdc-snapshots</id>
<username>GSt5gs</username>
<password>******</password>
</server>
</servers>
配置本地仓库地址
<localRepository>F:\mvn_rep</localRepository>
配置代理
<proxies>
<proxy>
<id>my-prosy</id>
<!-- active为true时,该代理被激活 -->
<active>true</active>
<!-- 代理协议 -->
<protocol>http</protocol>
<!-- 主机名 -->
<host>127.0.0.1</host>
<!-- 端口 -->
<port>8080</port>
<!--
<!-- 如果需要认证,就放开用户名和密码 -->
<username>admin</username>
<password>pass</password>
<!-- 指定哪些主机名不需要代理,用|分隔。支持*号通配符 -->
<nonProxyHosts>repository.com|*.google.com</nonProxyHosts>
-->
</proxy>
</proxies>
项目中配置上传配置
<distributionManagement>
<repository>
<!--此处id和上面server的id保持一致-->
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/131585-release-c3Uksj/</url>
</repository>
<snapshotRepository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/131585-snapshot-m8BIJZ/</url>
</snapshotRepository>
</distributionManagement>
常用命令
-
mvn clean 说明: 清理项目生产的临时文件,一般是模块下的target目录
-
mvn package 说明: 项目打包工具,会在模块下的target目录生成jar或war等文件
-
mvn install 说明: 模块安装命令 将打包的的jar/war文件复制到你的本地仓库中,供其他模块使用 -Dmaven.test.skip=true 跳过测试(同时会跳过test compile)
-
mvn test 说明: 测试命令,或执行src/test/java/下junit的测试用例
-
mvn deploy 说明: 发布命令 将打包的文件发布到远程参考,提供其他人员进行下载依赖 ,一般是发布到公司的私服
Maven站点报表
-
mvn project-info-reports:dependencies 生成项目依赖的报表
-
mvn dependency:resolve 查看依赖
-
mvn dependency:tree 查看项目依赖情况 打印出项目的整个依赖树
-
mvn dependency:analyze 帮助你分析依赖关系, 用来取出无用, 重复依赖的好帮手
-
mvn install -X 追踪依赖的完整轨迹
生命周期
resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package
- resources:resources 绑定在resource处理阶段, 用来将src/main/resources下或者任何指定其他目录下的文件copy到输出目录中
- resources:testResources 将test下的resources目录或者任何指定其他目录copy到test输出目录下
- compiler:testCompile 将测试类编译(包括copy资源文件)
- surefire:test 运行测试用例
- jar:jar 打jar包
各种范围
-
compile(编译范围) compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
-
provided(已提供范围) provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个
-
Servlet API; 这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
-
runtime(运行时范围) runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
-
test(测试范围) test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
-
system(系统范围) system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。