【问题标题】:determine repository URL for maven deploy-file确定 Maven 部署文件的存储库 URL
【发布时间】:2017-08-10 11:56:08
【问题描述】:

我正在使用 Maven 构建一个特定的项目,并且在 POM 中,我正在使用 maven shade 插件构建主要工件的 3 个不同变体(我正在使用包含的日志框架的各种组合创建 uber jar)。 shade 插件创建具有替代工件 ID 及其各自的依赖减少 poms 的 jar。

我现在面临的挑战是如何将这些新工件部署到我的远程存储库。我正在使用 maven install 插件将它们安装到我的本地 repo,但是 maven deploy 插件需要显式配置存储库 URL。我希望插件采用默认部署使用的任何远程仓库,无论是快照还是发布仓库,还是我通过命令行传入的另一个仓库 URL。我希望找到一些类似于 ${project.remoterepo.url} 的 maven 属性,它等同于已解决的 repo。当部署目标已经这样做时,必须显式配置远程 URL 似乎很愚蠢。

任何建议表示赞赏。谢谢!

【问题讨论】:

  • 你有没有发现如何做到这一点?我遇到了同样的问题,并且 deploy:deploy-file 开始激怒我。
  • 不,而且 maven kings 非常冷酷无情。您只能按照他们的规定使用这些工具!改变你的业务以适应工具基本上是我被告知的

标签: java maven maven-shade-plugin maven-deploy-plugin


【解决方案1】:

这就是我根据版本模式自动选择 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>

【讨论】:

    【解决方案2】:

    Tiemo Vorschütz 方法是个好主意,但可能对我不起作用。 它会在线程“主”BUG 中出现一些“异常”!源单元“脚本”错误中的“转换”阶段异常。

    我已将 gmaven plugin 更改为较新的版本并修复了错误,将其从 '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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 2014-11-02
      • 2022-07-25
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多