`
QING____
  • 浏览: 2250851 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven+Nexus进行SCM发布

 
阅读更多

    对于java的一些公用依赖包,我们通常需要发布在私有的nexus平台中,以便其他项目组使用。

    1)我们首先需要搭建自己的nexus平台。

    2)用户授权,指定用户具有release权限。

    3)调整maven中的setting.xml文件。

    4)调整project中的pom.xml文件。

 

1、setting.xml配置样例:

 

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <pluginGroups>
  </pluginGroups>

  <proxies>
  </proxies>

  <servers>
   	<server>
      <id>releases</id>
      <username>admin</username>
      <password>admin</password>
    </server>
	<server>
      <id>snapshots</id>
      <username>admin</username>
      <password>admin</password>
    </server>
  </servers>

  <mirrors>
  </mirrors>

 <profiles>
    	<profile>
        	<id>nexus</id>
        	<repositories>
            	<repository>
                	<id>nexus_public</id>
                	<name>Team Repository</name>
                	<url>http://nexus.test.com.cn/nexus/content/groups/public/</url>
                	<releases>
                    	<enabled>true</enabled>
                	</releases>
                	<snapshots>
                   		<enabled>true></enabled>
                   		<updatePolicy>always</updatePolicy>
                		<checksumPolicy>fail</checksumPolicy>
                	</snapshots>
            	</repository>
            	<repository>
            		<id>snapshots</id>
            		<url>http://nexus.test.com.cn/nexus/content/repositories/snapshots</url>
        		</repository>
        	</repositories>

        	<pluginRepositories>
            	<pluginRepository>
                	<id>nexus_public</id>
            		<url>http://nexus.test.com.cn/nexus/content/groups/public/</url>
            		<releases>
                		<enabled>true</enabled>
            		</releases>
            		<snapshots>
                		<enabled>true</enabled>
            		</snapshots>
            	</pluginRepository>
            	<pluginRepository>
            		<id>central</id>
            		<name>Central Repository</name>
            		<url>https://repo.maven.apache.org/maven2</url>
            		<releases>
                		<updatePolicy>never</updatePolicy>
            		</releases>
            		<snapshots>
                		<enabled>false</enabled>
            		</snapshots>
        		</pluginRepository>
        	</pluginRepositories>
    	</profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

 

    <server>标签中配置nexus服务器端用户授权信息,通常我们需要配置两个:releases和snapshots,当然如果你的jar不需要进行snapshots发布,也可以不用配置。<profile>中配置project中引用jar时需要访问nexus服务器的方式。

 

2、pom.xml样例

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <description>jdbc utils</description>

    <groupId>com.test.utils</groupId>
    <artifactId>jdbc-utils</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>jdbc-utils</name>

    <properties>
		<jedis.version />
        <java.version>1.8</java.version>
        <org.springframework-version>4.3.3.RELEASE</org.springframework-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <scm>
        <developerConnection>scm:git:ssh://git@code.test.com.cn:3590/yourname/jdbc-utils.git</developerConnection>
        <url>scm:git:ssh://git@code.test.com.cn:3590/yourname/jdbc-utils.git</url>
        <connection>scm:git:ssh://git@code.test.com.cn:3590/yourname/jdbc-utils.git</connection>
	<!-- 此git地址上生成tag标签名,在release:prepare时会提示输入,此处可以不用配置 -->
        <tag>jdbc-utils-1.0</tag>
    </scm>
    <distributionManagement>
        <!-- if you use public-release -->
        <repository>
            <id>releases</id>
            <name>releases</name>
            <url>http://nexus.test.com.cn/nexus/content/repositories/releases/</url>
        </repository>
        <!-- if you use snapshots. -->
        <snapshotRepository>
            <id>snapshots</id>
            <name>snapshots</name>
            <url>http://nexus.test.com.cn/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>
</project>

 

    1)项目的版本需要以“-SNAPSHOT”结尾,否则在release时将会抛出:

You don't have a SNAPSHOT project in the reactor projects list. 

 

    2)项目中需要配置“maven-release-plugin”,否则将无法执行命令,且此plugin的版本最好是最新的、且与maven的版本是兼容的。

    3)<scm>标签中配置你的git地址,而且具有此git地址的“push”等权限。

    4)<distributionManagement>标签中,配置需要进行代码release的地址,包括“releases”和“snapshots”(可选),<id>的值必须与setting.xml中<server>.<id>对应。此处需要非常注意的是:<server>中配置的用户需要具有pom.xml中两个地址的代码提交权限。否则将会抛出:

Return code is: 401, ReasonPhrase: Unauthorized.

 

    5)为了避免不必要的问题,我们还需要将pom.xml中对应的两个url的访问权限按下图所示进行修改(在nexus平台上):

 

 

    如果没有修改,极有可能抛出:

Return code is: 400, ReasonPhrase: Bad Request.

 

3、执行:

    对于SCM发布,我们通常关注三个指令(参见maven-release-plugin):

    1)mvn release:clean:清理release过程中产生的临时文件,通常当我们在release执行的任何过程中出现错误,或者放弃release时,执行此命令,类似于一个“回滚”的操作。

    2)mvn release:rollback:回滚操作,当release操作执行一部分之后,无论是否发生错误,如果你希望回滚到release之前的代码状态,可以执行此操作。(注意,release:prepare阶段执行过程中,会修改pom.xml文件,rollback即表示回滚到prepare之前的状态)

    3)mvn release:prepare:release的准备阶段,也是正常流的第一个操作,此阶段将会提示操作者本次release的版本号、下一次开发的SNAPSHOT版本号、生成tag的名称等,我们通常是一路回车,一切操作保持默认即可。

    4)mvn release:perform:执行release远程发布,执行成功后,我们应该会在nexus响应的url中查看到我们的jar列表。

    5)每次发布,都会在scm指定的git地址上生成一个tag,这个tag号与你的version保持一致,如果你意外出错,重新release相同版本时可能不会成功,因为此tag已经存在,此时你需要执行“git tag -d <你的tag名称>”来删除tag才能继续。(可以通过“git tag”查看tag的列表)

  • 大小: 33.7 KB
分享到:
评论

相关推荐

    Maven在企业中的使用

    - **配置管理**:Maven支持集成SCM系统,如Git、SVN等,便于代码版本控制和管理。 - **发布管理**:Maven提供了标准化的发布流程,确保软件发布的稳定性和可靠性。 #### POM文件详解 POM(Project Object Model)...

    Maven权威指南 很精典的学习教程,比ANT更好用

    使用Maven Dependency插件进行优化 8.6. 最终的POM 8.7. 小结 II. Maven Reference 9. 项目对象模型 9.1. 简介 9.2. POM 9.2.1. 超级POM 9.2.2. 最简单的POM 9.2.3. 有效POM 9.2.4. 真正的POM 9.3. ...

    maven库的镜像

    对于标签“源码”和“工具”,在Maven中,源码管理通常涉及到版本控制系统如Git,而Maven则可以与这些版本控制工具配合,通过`&lt;scm&gt;`标签在pom.xml中配置项目的源码仓库信息,以便于持续集成和版本追踪。 至于...

    Maven全

    - **项目信息管理**:包括项目描述、作者、许可证、SCM信息等,方便项目管理和发布。 **3. Maven的生命周期与构建阶段** Maven有三个生命周期:`clean`、`default`(或`compile`)、`install`和`deploy`。每个生命...

    maven,SpringMVC技术总结

    例如,模块B的开发者可以发布B-1.0-SNAPSHOT到Nexus仓库,其他依赖B的模块(如模块A)会自动获取并使用最新的SNAPSHOT版本。 3. SpringMVC与Maven的关系 SpringMVC是Spring框架的一部分,用于构建Web应用程序。在...

    详解如何将JAR包发布到Maven中央仓库

    Maven中央仓库不直接支持上传,而是需要通过第三方仓库,如Sonatype OSSRH (Open Source Software Repository Hosting) 进行发布。以下是一个详细的步骤指南: 1. **注册Sonatype JIRA账号**: 首先,你需要在...

    Maven2环境安装与准备工作详解

    在本文中,我们将详细介绍如何在Ubuntu 11.04上安装Maven2,以及如何配置和使用Nexus创建私服和宿主仓库,同时还会涉及Hudson的持续集成配置。 ### 1. Maven2的安装 首先,确保已安装JDK。在Ubuntu上,可以使用`...

    最全jenkin工具安装部署

    例如,使用Maven的`deploy`目标将构建的 artifacts 发布到远程服务器。 至此,Jenkins的安装、配置和项目集成已完成,你可以开始享受自动化构建带来的便利。记得定期更新Jenkins及其插件,以保持最佳的稳定性和功能...

    scaladex:Scala软件包索引

    开发者可以将Scala包发布到Sonatype的Nexus仓库,然后通过Maven或SBT等构建工具引用这些包。 **SBT (Scala Build Tool)** SBT是Scala项目的主要构建工具,它自动管理依赖关系,构建项目,并提供了丰富的插件生态...

    jenkins-pipeline-library:wcm.io CICD的Jenkins管道库

    该库的目标是消除流水线创建的一些复杂性(是的,也增加了一些),并带回一些已知的功能(例如GIT_BRANCH和SCM_URL环境变量,关于仍然不稳定的邮件通知等)。 想看个例子吗? 看 目录 更改/版本历史 关键概念 ...

    jenkinshello:詹金斯测试演示

    5. **发布与部署**:构建成功后,詹金斯可以将生成的可部署工件(如JAR或WAR文件)推送到远程服务器,或者存储到artifact仓库,如Nexus或Artifactory。 6. **可视化报告**:詹kinshello的构建历史和测试结果会在...

    JenkinsDemoGitHub

    首先,Jenkins是一个开源的持续集成服务器,它允许开发者通过自动化构建、测试和发布流程来快速响应代码变更。Jenkins支持多种插件,使其能够适应各种开发环境和构建需求。在这个项目中,你需要安装并配置Jenkins,...

    Git-With-Jenkins

    4. **添加构建步骤**:配置构建过程,例如运行 `mvn clean install` 命令进行 Maven 构建,或者运行 `gradle build` 进行 Gradle 构建。 5. **设置测试和部署**:添加测试步骤,如 JUnit 或 TestNG,然后配置部署...

    Jenkings_tests:持续集成服务器上的分析工作

    - 配置包括添加全局工具(如Git,Maven等),设置工作目录,以及配置安全策略。 2. **创建Java项目** - 在Jenkins中,新建一个自由风格的软件项目,指定源码管理(如Git或SVN)和构建触发器(如定时构建或拉取...

Global site tag (gtag.js) - Google Analytics