簡體   English   中英

為 maven 部署文件確定存儲庫 URL

[英]determine repository URL for maven deploy-file

我正在使用 Maven 來構建一個特定的項目,並且在 POM 中,我正在使用 maven 陰影插件構建主要工件的 3 個不同變體(我正在創建 uber ZBE1587EA25D1C05C081D3BDE9C4 的各種組合) 陰影插件創建 jars 具有替代工件 ID 及其各自的依賴減少 pom。

我現在的挑戰是如何將這些新工件部署到我的遠程存儲庫。 我正在使用 maven 安裝插件將它們安裝到我的本地存儲庫,但 maven 部署插件需要顯式配置存儲庫 URL。 我想要讓插件采用默認部署使用的任何遠程存儲庫,無論是快照或發布存儲庫還是我通過命令行傳入的另一個存儲庫 URL。 我希望找到一些 maven 屬性,例如 ${project.remoterepo.url} 等同於已解決的回購。 當部署目標已經這樣做時,必須顯式配置遠程 URL 似乎很愚蠢。

任何建議表示贊賞。 謝謝!

這就是我根據版本模式自動選擇SNAPSHOT或RELEASE repro所做的事情:(我知道這是一種代碼味道,但是ASF不願意包含你的代碼,因為我有可能解決我的要求)

<properties>
    <deploy.repositoryUrl>.. url release repo ..</deploy.repositoryUrl>
    <deploy.repositoryId>.. id release repo ..</deploy.repositoryId>
    <deploy.repositorySnapshotUrl>.. snapshot repo ..</deploy.repositorySnapshotUrl>
    <deploy.repositorySnapshotId>.. id snapshot repo ..</deploy.repositorySnapshotId>       
</properties>

<build>     
    <plugins>   
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <!-- sets the isSnapshot property to true if SNAPSHOT was used -->
                    <id>build-helper-regex-is-snapshot-used</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>regex-property</goal>
                    </goals>
                    <configuration>
                        <name>isSnapshot</name>
                        <value>${project.version}</value>
                        <regex>.*-SNAPSHOT</regex>
                        <replacement>true</replacement>
                        <failIfNoMatch>false</failIfNoMatch>                            
                    </configuration>
                </execution>                    
            </executions>
        </plugin>   
        <!-- set the properties deploy.Url and deploy.Id during validation to 
        either the snapshot repository or the release repository 
        depending on the version pattern.-->            
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source><![CDATA[
                            pom.properties['deploy.Url']=pom.properties['isSnapshot'].equals('true') ? pom.properties['deploy.repositorySnapshotUrl'] : pom.properties['deploy.repositoryUrl'];
                            pom.properties['deploy.Id']=pom.properties['isSnapshot'].equals('true') ? pom.properties['deploy.repositorySnapshotId'] : pom.properties['deploy.repositoryId'];
                        ]]></source>
                    </configuration>
                </execution>
            </executions>
        </plugin>   
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>3.0.0-M1</version>
            <configuration>
                <skip>true</skip>
            </configuration> 
            <executions>
                <execution>
                    <id>DeployToArtifactory</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                        <url>${deploy.Url}</url>
                        <repositoryId>${deploy.Id}</repositoryId>
                        <file>target/${project.build.finalName}.${project.packaging}</file>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                        <packaging>jar</packaging>
                        <classifier>resources</classifier>
                        <pomFile>${project.build.directory}/pom/pom.xml</pomFile>
                    </configuration>
                </execution>
            </executions>                                                        
        </plugin>
    </plugins>
</build>

Tiemo Vorschütz方法是個好主意,但可能對我不起作用。 它會導致線程“main”中的一些“異常”BUG! 源單元“腳本”錯誤中的“轉換”階段異常。

我已將gmaven 插件更改為較新版本並修復了錯誤,將其從 'gmaven-plugin' 1.x 更改為 'groovy-maven-plugin' 2.x,如下所示:

<properties>
<deploy.repositoryUrl>.. url release repo ..</deploy.repositoryUrl>
<deploy.repositoryId>.. id release repo ..</deploy.repositoryId>
<deploy.repositorySnapshotUrl>.. snapshot repo ..</deploy.repositorySnapshotUrl>
<deploy.repositorySnapshotId>.. id snapshot repo ..</deploy.repositorySnapshotId>       
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <!-- sets the isSnapshot property to true if SNAPSHOT was used -->
                    <id>build-helper-regex-is-snapshot-used</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>regex-property</goal>
                    </goals>
                    <configuration>
                        <name>isSnapshot</name>
                        <value>${project.version}</value>
                        <regex>.*-SNAPSHOT</regex>
                        <replacement>true</replacement>
                        <failIfNoMatch>false</failIfNoMatch>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- set the properties deploy.Url and deploy.Id during validation to
        either the snapshot repository or the release repository
        depending on the version pattern.-->
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source><![CDATA[
                            project.getProperties().put('deploy.Url',properties['isSnapshot'].equals('true') ? properties['deploy.repositorySnapshotUrl'] : properties['deploy.repositoryUrl']);
                            project.getProperties().put('deploy.Id',properties['isSnapshot'].equals('true') ? properties['deploy.repositorySnapshotId'] : properties['deploy.repositoryId']);
                            ]]></source>
                    </configuration>
                </execution>
            </executions>
        </plugin>        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>3.0.0-M1</version>
        <configuration>
            <skip>true</skip>
        </configuration> 
        <executions>
            <execution>
                <id>DeployToArtifactory</id>
                <phase>deploy</phase>
                <goals>
                    <goal>deploy-file</goal>
                </goals>
                <configuration>
                    <url>${deploy.Url}</url>
                    <repositoryId>${deploy.Id}</repositoryId>
                    <file>target/${project.build.finalName}.${project.packaging}</file>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <packaging>jar</packaging>
                    <classifier>resources</classifier>
                    <pomFile>${project.build.directory}/pom/pom.xml</pomFile>
                </configuration>
            </execution>
        </executions>                                                        
    </plugin>

一個簡單的方法是利用distributionManagementbuild-helper-maven-plugin正如 Tiemo Vorschütz 的回答所指出的那樣。

...

<distributionManagement>
  <repository>
    <id>my-release</id>
    <name>my-release</name>
    <url>https://example.com/release</url>
  </repository>
  <snapshotRepository>
    <id>my-snapshot</id>
    <name>my-snapshot</name>
    <url>https://example.com/snapshot</url>
  </snapshotRepository>
</distributionManagement>

...

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <version>3.3.0</version>
      <executions>
        <execution>
          <!-- sets the repoUrl property to the correct repository depending on the type of version -->
          <id>build-deploy-url</id>
          <phase>validate</phase>
          <goals>
            <goal>regex-property</goal>
          </goals>
          <configuration>
            <name>repoUrl</name>
            <value>${project.version}</value>
            <regex>.*-SNAPSHOT</regex>
            <replacement>${project.distributionManagement.snapshotRepository.url}</replacement>
            <failIfNoMatch>${project.distributionManagement.repository.url}</failIfNoMatch>
          </configuration>
        </execution>
      </executions>
    </plugin>

    <plugin>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
        <execution>
          <id>deploy-file</id>
          <phase>deploy</phase>
          <goals>
            <goal>deploy-file</goal>
          </goals>
          <configuration>
            <file>${project.build.directory}/<!--your-file--></file>
            <url>${repoUrl}</url>
            <repositoryId><!--repo as per settings.xml if credentials are the same--></repositoryId>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <version>${project.version}</version>
            <packaging><!--your packaging--></packaging>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM