0.前言
在日常开发过程中,我们会遇到部分jar包属于公司内部使用不能外传,部分jar包属于其它公司提供,但是他们也不希望发布到中央仓库,这可造成了一定的混乱。虽然这些包可以本地安装。但是有条件的公司一般在内网自己搭建maven 私有服务器,同时,阿里云用户可以在云效中使用自己搭建的私有Maven仓库。当我们有了一个私有服务器了,我们的打法就不同了。下面我就私有服务器作用的两部分来聊它们需要的配置。
1.作为镜像(伸手党)
一般说来,公司的私服也是定时拉取其它国内私服镜像,比如阿里云镜像。所以我们在配置的时候应该让中央仓库被我们的私服所代理。额外所需要jar包在项目的pom文件中配置。故在settings.xml
文件中只应添加:
<mirrors>
<mirror>
<id>nexus3</id>
<name>nexus3</name>
<url>http://192.168.8.8:8888/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
其中的192.168.8.8:8888
是maven仓库的地址,每个公司都不一样的,如果不是自己搭建的,可以询问组内其他人员或组长。那么我们必然需要公司内部的jar包嘛,所以我们就要在自己的项目的pom
文件中添加对应的仓库,假设我们需要一些快照jar包,我们就可以配置:
<repositories>
<repository>
<id>nexus3-snapshots</id>
<name>nexus3-snapshots</name>
<url>http://192.168.8.8:8888/repository/maven-snapshots/</url>
</repository>
</repositories>
别的公司给我们的jar包,我们也可以在Nexus Repository
中手动上传。然后在特定项目中配置<repository>
就可以了:
2.发布jar包(造物主)
2.1. 发布jar包的钥匙
由于我们要发布到公司内部的maven私服,就要对它进行保护。不能谁都能进行jar包发布,有一些人恶搞一些没用的jar包往里塞也允许,服务器就混乱了。我们也需要知道是谁发布了jar包,故我们最好是给每个程序员建立账号和密码。对于开启发布大门的钥匙,我们需要添加配置:
<servers>
<server>
<id>maven-releases</id>
<username>henry</username>
<password>henryPassword</password>
</server>
<server>
<id>maven-snapshots</id>
<username>henry</username>
<password>henryPassword</password>
</server>
<server>
<id>3rd_part</id>
<username>henry</username>
<password>henryPassword</password>
</server>
</servers>
2.2. 管理可以发布的类型(发布门槛)
我们知道,我们的jar包是有快照和正式两种版本类型。快照的jar包可能会因为同事的催促发布到私有服务器上,但是又没有一个长期存在的价值。且查找某个版本时异常复杂因为匆忙发布往往忘记修改快照版本。此时就需要区分快照和稳定版本发布的配置。故我们需要在settings
中配置:
<profiles>
<profile>
<id>nexus3</id>
<repositories>
<repository>
<id>maven-public</id>
<url>http://192.168.8.8:8888/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-releases</id>
<url>http://192.168.8.8:8888/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<url>http://192.168.8.8:8888/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>3rd_part</id>
<url>http://192.168.8.8:8888/repository/3rd_part/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<url>http://192.168.8.8:8888/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<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>
</profiles>
最后不要忘了激活这个profile
,激活了之后,在所有的maven build
中都会应用它们的,防止自己出错。
<activeProfiles>
<activeProfile>nexus3</activeProfile>
</activeProfiles>
2.3.汇总
故对于发布一个jar包,你需要在settings.xml
中配置:
<!-- 下面配置认证的信息,每当maven需要连接到一个服务器时需要认证信息了,都会在这里查一下。 -->
<servers>
<server>
<id>maven-releases</id>
<username>henry</username>
<password>henryPassword</password>
</server>
<server>
<id>maven-snapshots</id>
<username>henry</username>
<password>henryPassword</password>
</server>
<server>
<id>3rd_part</id>
<username>henry</username>
<password>henryPassword</password>
</server>
</servers>
<!-- 如下的配置一些maven 在build过程中的定制化的内容-->
<profiles>
<profile>
<id>nexus3</id>
<repositories>
<repository>
<id>maven-public</id>
<url>http://192.168.8.8:8888/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-releases</id>
<url>http://192.168.8.8:8888/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<url>http://192.168.8.8:8888/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>3rd_part</id>
<url>http://192.168.8.8:8888/repository/3rd_part/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<url>http://192.168.8.8:8888/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<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>
</profiles>
<activeProfiles>
<activeProfile>nexus3</activeProfile>
</activeProfiles>
3.发布改变世界的jar包吧
做好了前期的这些整体的配置,下面就要对项目进行发布了。由于发布至少会包含快照和正式两种类型,故您可以在pom
文件中添加如下的配置:
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>maven-releases</name>
<url>http://192.168.8.8:8888/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>http://192.168.8.8:8888/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
以上的配置既可以设置在父级pom
文件,也可以逐个配置在各个maven
模块项目中,您可以依据项目的具体情况来配置。这样您就可以使用maven
的deploy
命令来进行发布。一般情况下,会先安装在本地,然后再发布到私服上,如果不愿意点击两回,可以配置如下Run/Debug Configuration
:
4.源码也发布(更高的精神追求)
当然了,没有我们项目权限的同事会抱怨:“你这个jar包对应的代码里一行注释都没有,我发现有问题也不好给你排查啊!”这个时候你可以慷慨激昂地安慰他:“我把源码发上去就是了,你Dowload Sources
”。接下来你这样操作,入世未深的同事只能说一句:“🐂🍺!”
我们在非父项目的pom文件里添加插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
然后在idea中你添加一个Run/Debug Configuration
,用来进行源码的上传。
这样,你之后只需要选择这个配置执行就可以了。