阿里云效 / coding 制作 maven 成品

452 阅读2分钟

阿里云效

使用公共 Maven 仓库

Flow 会默认使用构建代码库的根目录下 Maven 的 settings.xml 文件中配置的依赖库。 如果用户项目代码库的根目录没有 Maven settings.xml 文件, Flow 构建时会为用户自动生成一个 settings.xml 文件,并且配置连接阿里云公共代理仓库 maven.aliyun.com 。 用户通过 Flow 构建时,会默认使这 Maven 仓库的二方库作为构建依赖。

使用企业自建私有 Maven 仓库

如果需要指定连接企业自建私有的 Maven 仓库,需要在构建代码库的根目录下,添加 settings.xml 文件,并在 settings.xml 指定依赖的 Maven 仓库。
(1)源码仓库中添加 settings.xml ,比如构建的项目为 java_demo , 则可以把 settings.xml放置到 java_demo 的根目录下 (2)在 settings.xml 中,指定使用的 Maven 仓库地址

 <mirror>
    <id>alimaven</id>
       <name>your maven</name
       <url>{企业自己的Maven仓库地址:如http://maven.aliyun.com/nexus/content/groups/public/}
	   </url>
       <mirrorOf>central</mirrorOf>
     </mirror>

(3)在构建命令中,指定setting.xml文件

mvn -s settings.xml clean package

上传至 Maven 私服

前提条件 Maven 私服需要支持公网可访问,或至少云效流水线 的构建机可以访问你的 Maven 私服。 在代码库根目录放置 Maven 的配置文件 settings.xml ,里面包含了私服的认证信息。 代码库的 pom.xml 文件中配置了正确的 Deploy 插件。

mvn -s settings.xml -B clean deploy -Dmaven.test.skip=true -Dautoconfig.skip

image.png

运行流水线,可以查看构建日志看到构建出来的二方库是否被上传到私有仓库中。

腾讯 coding 制作 maven 成品

settings.xml 配置servers信息

<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <servers>
    <server>
      <id>my-team-maven-demo-maven</id>
      <username>${env.MY_MAVEN_USERNAME}</username>
      <password>${env.MY_MAVEN_PASSWORD}</password>
    </server>
  </servers>
</settings>

pom.xml 配置

<project>
    <!-- 必要属性 -->
    <groupId>[GROUP_ID]</groupId>
    <artifactId>[ARTIFACT_ID]</artifactId>
    <version>[VERSION]</version>
 
    <!-- 自定义仓库 -->
    <distributionManagement>
        <repository>
            <!--必须与 settings.xml 的 id 一致-->
            <id>my-team-maven-demo-maven</id>
            <name>maven</name>
            <url>https://my-team-maven.pkg.coding.net/repository/maven-demo/maven/</url>
        </repository>
    </distributionManagement>
</project>

执行 mvn deploy 命令

若提示未找到 settings.xml 文件,在命令末尾加上 -s 参数来设置您放置 settings 文件的路径,代入参数后:

 mvn deploy -s "/Users/somebody/software/apache-maven-3.6.2/conf/settings.xml"

上传无源码的 Maven 包

如果第三方 Maven 包未正规发布到网络仓库,而且仅提供 jar 包,未提供源码或者源码编译报错,那我们可以把 jar 包直接上传到仓库,命令如下:

mvn deploy:deploy-file -Durl=file://C:\m2-repo \
                       -DrepositoryId=some.id \
                       -Dfile=your-artifact-1.0.jar \
                       [-DpomFile=your-pom.xml] \
                       [-DgroupId=org.some.group] \
                       [-DartifactId=your-artifact] \
                       [-Dversion=1.0] \
                       [-Dpackaging=jar] \
                       [-Dclassifier=test] \
                       [-DgeneratePom=true] \
                       [-DgeneratePom.description="My Project Description"] \
                       [-DrepositoryLayout=legacy]

如果第三方提供了 pom.xml,可以从中读取 group、artifact、version 等字段,比如「微信云支付 Java SDK」使用下列命令:

mvn deploy:deploy-file --settings ./settings.xml -Durl=https://coding-public-maven.pkg.coding.net/repository/tencent-cloud-pay-sdk-java/tencent/ \
                       -DrepositoryId=coding-public-tencent-cloud-pay-sdk-java-tencent \
                       -Dfile=../cloudpay.jar \
                       -DpomFile=pom.xml

拉取 Maven 制品

配置到 settings.xml

<settings>
    <!-- omitted xml -->
    <profiles>
        <profile>
            <id>Repository Proxy</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>coding-public-tencent-cloud-pay-sdk-java-tencent</id>
                    <name>tencent</name>
                    <url>https://coding-public-maven.pkg.coding.net/repository/tencent-cloud-pay-sdk-java/tencent/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
</settings>

编译项目

mvn install -s ./settings.xml

执行过程您可以看到包被正常拉取下来,也可以在执行完成后在本地 maven 缓存看到拉取下来的包.

其他

关于华为云成品和阿里云成品, 请参考