在何处为Artifactory发布指定存储库元素?

时间:2016-01-19 08:02:06

标签: maven pom.xml artifactory maven-release-plugin

我正在尝试在Artifactory存储库中发布一个项目。这是一个项目,它是我的主项目的依赖项,所以我想将pom,.jar和sources.jar放在artifactory存储库中。

settings.xml文件存储在maven目录中:

D:\...\...\maven\apache-maven-3.3.1\conf  

我已使用以下maven命令标记了该版本:

mvn clean release:prepare  

然后,如果我尝试:

mvn clean release:perform –Partifactory  

,我收到错误:

  

[INFO] [错误]无法执行目标org.apache.maven.plugins:maven-deploy-plugin:2.7:在项目上部署(默认部署)........:部署失败:存储库在distributionManagement元素中的POM或-DaltDeploymentRepository = id :: layout :: url参数

中未指定元素

如何使用神器配置文件?是否可以不改变pom? 我试图在我的本地maven存储库中复制settings.xml但没有成功。

如果我必须更改pom,我可以先在mvn release:prepare命令之后获得的状态之前返回吗?在以下链接中,我不明白我是否必须手动执行某些操作(从SCM中删除标记): http://maven.apache.org/maven-release/maven-release-plugin/examples/rollback-release.html

settings.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">

<localRepository>D:\...\...\maven\repository</localRepository>

<profiles>  
<profile>  
  <repositories>  
    <repository>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
      <id>central</id>  
      <name>libs-release</name>  
      <url>http://x/artifactory/libs-release</url>  
    </repository>  
    <repository>  
      <snapshots />  
      <id>snapshots</id>  
      <name>libs-snapshot</name>  
      <url>http://x/artifactory/libs-snapshot</url>  
    </repository>  
  </repositories>  
  <pluginRepositories>  
    <pluginRepository>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
      <id>central</id>  
      <name>plugins-release</name>  
      <url>http://x/artifactory/plugins-release</url>  
    </pluginRepository>  
    <pluginRepository>  
      <snapshots />  
      <id>snapshots</id>  
      <name>plugins-snapshot</name>  
      <url>http://x/artifactory/plugins-snapshot</url>  
    </pluginRepository>  
  </pluginRepositories>  
  <id>artifactory</id>  
</profile>  
  </profiles>  
  <activeProfiles>  
   <activeProfile>artifactory</activeProfile>  
  </activeProfiles>  

</settings> 

pom:

<?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/maven-v4_0_0.xsd">

    <parent>
        <groupId>....</groupId>
        <artifactId>my-parent</artifactId>
        <version>1.0.6</version>
        <relativePath />
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>....</groupId>
    <artifactId>myproject</artifactId>
    <packaging>jar</packaging>
    <version>1.9.6-SNAPSHOT</version>
    <name>myproject</name>
    <url>${wiki.url}</url>
    <scm>    <developerConnection>scm:svn:http://x/svn/main/y/Development/Components/trunk/myproject</developerConnection>
        <url>http://x/svn/main/y/Development/Components/trunk/myproject</url>
    </scm>
    <ciManagement>
        <system>${ciManagement.system}</system>
        <url>${ciManagement.url}/${project.artifactId}</url>        
    </ciManagement>

    <properties>       
    </properties>

    <dependencies>
        <! -  - my dependencies -  - >
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <inherited>false</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>   <tagBase>http://x/svn/main/y/Development/Components/tags</tagBase>
                </configuration>
            </plugin>
        </plugins>
    </build>

    </project>

The parent pom :  

<!-- language: lang-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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>....</groupId>
    <artifactId>my-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0.6</version>
    <name>my-parent</name>
    <url>${wiki.url}</url>
    <scm>
        <developerConnection>scm:svn:http://x/svn/main/y/Development/Components/tags/my-parent-1.0.6</developerConnection>
        <url>http://x/svn/main/y/Development/Components/tags/my-parent-1.0.6</url>
    </scm>
    <ciManagement>
        <system>${ciManagement.system}</system>
        <url>${ciManagement.url}/${project.artifactId}</url>        
    </ciManagement>
    <build> 
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.3</version>
            </plugin>

        </plugins>
    </build>

</project>

1 个答案:

答案 0 :(得分:2)

两件事。您应该在POM中声明<distributionManagement>部分:

<project>
  ...
  <distributionManagement>
    <repository>
     <id>my-artifactory</id>
     <name>Artifactory Release Repo</name>
     <url>http://x/artifactory/libs-release</url>
    </repository>
    <snapshotRepository>
     <id>my-artifactory</id>
     <name>Artifactory Release Repo</name>
     <url>http://x/artifactory/libs-snapshot</url>
    </snapshotRepository>
  </distributionManagement>
</project>

<id>代码必须与settings.xml中的条目匹配才能匹配的凭据:

<settings>
  ...
  <servers>
   <server>
    <id>my-artifactory</id>
    <username>bob</username>
    <password>secret</password>
   </server>
  </servers>
</settings>

现在,话虽如此,由于mvn release:prepare已经在VCS中标记了版本,因此您不需要 来删除新版本,但我建议您添加POM的<distributionManagement>部分。部署工件的一种方法是简单地从VCS获取标记并执行mvn deploy,如下所示:

svn co <the url to your tag>
mvn -DaltDeploymentRepository=my-artifactory::default::http://x/artifactory/libs-release deploy