Java 根据项目版本,使用发布或快照存储库进行手动部署

Java 根据项目版本,使用发布或快照存储库进行手动部署,java,maven,maven-deploy-plugin,build-helper-maven-plugin,Java,Maven,Maven Deploy Plugin,Build Helper Maven Plugin,如果项目的当前版本是快照版本,我想使用快照存储库(使用已配置的属性project.distributionManagement.snapshotRepository.url)将手动文件部署配置到远程存储库,或者配置到发布存储库(使用配置的属性project.distributionManagement.repository.url)否则 我想将swagger json模式部署到存储库中,除了手动部署之外,我没有找到任何其他方法。有一个解决方法,可以使用builder helper bsh从分发管

如果项目的当前版本是快照版本,我想使用快照存储库(使用已配置的属性project.distributionManagement.snapshotRepository.url)将手动文件部署配置到远程存储库,或者配置到发布存储库(使用配置的属性project.distributionManagement.repository.url)否则


我想将swagger json模式部署到存储库中,除了手动部署之外,我没有找到任何其他方法。

有一个解决方法,可以使用builder helper bsh从分发管理配置中使用正确的存储库。它使用正确的值设置属性。然后调用maven deploy插件,目标是:部署文件和此URL

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.12</version>
    <executions>
        <execution>
            <goals>
                <goal>bsh-property</goal>
            </goals>
            <configuration>
                <properties>
                    <property>deploy.url</property>
                </properties>
                <source>deploy.url = project.getVersion().endsWith("-SNAPSHOT") ? project.getDistributionManagement().getSnapshotRepository().getUrl() : project.getDistributionManagement().getRepository().getUrl() ;</source>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    <executions>
        <execution>
            <phase>deploy</phase>
            <goals>
                <goal>deploy-file</goal>
            </goals>
            <configuration>
                <url>${deploy.url}</url>
                <repositoryId>releases</repositoryId>
                <file>${swagger.directory}/swagger.json</file>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <version>${project.version}</version>
                <packaging>json</packaging>
                <classifier>swagger</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

org.codehaus.mojo
构建助手maven插件
1.12
bsh属性
deploy.url
deploy.url=project.getVersion().endsWith(“-SNAPSHOT”)?project.getDistributionManagement().getSnapshotRepository().getUrl():project.getDistributionManagement().getRepository().getUrl();
org.apache.maven.plugins
maven部署插件
2.8.2
部署
部署文件
${deploy.url}
释放
${swagger.directory}/swagger.json
${project.groupId}
${project.artifactId}
${project.version}
json
大摇大摆

使用builder helper bsh可以从分发管理配置中使用正确的存储库。它使用正确的值设置属性。然后使用目标部署文件和此URL调用maven部署插件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.12</version>
    <executions>
        <execution>
            <goals>
                <goal>bsh-property</goal>
            </goals>
            <configuration>
                <properties>
                    <property>deploy.url</property>
                </properties>
                <source>deploy.url = project.getVersion().endsWith("-SNAPSHOT") ? project.getDistributionManagement().getSnapshotRepository().getUrl() : project.getDistributionManagement().getRepository().getUrl() ;</source>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    <executions>
        <execution>
            <phase>deploy</phase>
            <goals>
                <goal>deploy-file</goal>
            </goals>
            <configuration>
                <url>${deploy.url}</url>
                <repositoryId>releases</repositoryId>
                <file>${swagger.directory}/swagger.json</file>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <version>${project.version}</version>
                <packaging>json</packaging>
                <classifier>swagger</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

org.codehaus.mojo
构建助手maven插件
1.12
bsh属性
deploy.url
deploy.url=project.getVersion().endsWith(“-SNAPSHOT”)?project.getDistributionManagement().getSnapshotRepository().getUrl():project.getDistributionManagement().getRepository().getUrl();
org.apache.maven.plugins
maven部署插件
2.8.2
部署
部署文件
${deploy.url}
释放
${swagger.directory}/swagger.json
${project.groupId}
${project.artifactId}
${project.version}
json
大摇大摆

如果您需要部署某个工件(可能是json文本文件),但该工件没有相应的pom.xml文件支持,则可以使用部署文件目标:

这允许您将任何类型的工件从任何来源部署到maven存储库中,通过命令行指定组、工件和版本坐标,以及您需要的任何其他内容

为了根据您的版本将其部署到正确的位置,我可以向您推荐我们为类似目的构建的ant脚本的以下片段:

<condition property="url" value="${snapshots.repo.url}" else="${releases.repo.url}">
            <contains string="${project.version}" substring="-SNAPSHOT"/>
        </condition>
        <exec executable="cmd">
            <arg value="/c"/>
            <arg value="mvn.bat"/>
            <arg value="deploy:deploy-file"/> 
            <arg value="-DgroupId=com.myorg.swagger"/>
            <arg value="-DartifactId=swagger_file"/>
            <arg value="-Dversion=${project.version}"/>
            <arg value="-U"/>
            <arg value="-Dfile=./mydir/my_swagger_file.json"/>
            <arg value="-Durl=${url}"/>
            <arg value="-DrepositoryId=my_repo_id"/>
          </exec>

这只适用于Windows,但很容易适用于任何其他操作系统。这里有趣的一点是repositoryId,它应该指向您的settings.xml中的现有身份验证:

...
<servers>
        <server>
            <id>my_repo_id</id>
            <username>your_user_for_deployment</username>
            <password>your_pwd_for_deployment</password>
        </server>
</servers>
...
。。。
我的回购id
用于部署的\u用户\u
用于部署的\u pwd\u
...

希望这将帮助您^^

如果您需要部署一些没有相应pom.xml文件支持的工件(可能是json文本文件),您可以使用部署文件目标:

这允许您将任何类型的工件从任何来源部署到maven存储库中,通过命令行指定组、工件和版本坐标,以及您需要的任何其他内容

为了根据您的版本将其部署到正确的位置,我可以向您推荐我们为类似目的构建的ant脚本的以下片段:

<condition property="url" value="${snapshots.repo.url}" else="${releases.repo.url}">
            <contains string="${project.version}" substring="-SNAPSHOT"/>
        </condition>
        <exec executable="cmd">
            <arg value="/c"/>
            <arg value="mvn.bat"/>
            <arg value="deploy:deploy-file"/> 
            <arg value="-DgroupId=com.myorg.swagger"/>
            <arg value="-DartifactId=swagger_file"/>
            <arg value="-Dversion=${project.version}"/>
            <arg value="-U"/>
            <arg value="-Dfile=./mydir/my_swagger_file.json"/>
            <arg value="-Durl=${url}"/>
            <arg value="-DrepositoryId=my_repo_id"/>
          </exec>

这只适用于Windows,但很容易适用于任何其他操作系统。这里有趣的一点是repositoryId,它应该指向您的settings.xml中的现有身份验证:

...
<servers>
        <server>
            <id>my_repo_id</id>
            <username>your_user_for_deployment</username>
            <password>your_pwd_for_deployment</password>
        </server>
</servers>
...
。。。
我的回购id
用于部署的\u用户\u
用于部署的\u pwd\u
...

希望这将对您有所帮助^ ^

@Nicolas Henneaux回答是正确的,但是
部署
阶段
构建助手maven插件
是错误的。新属性在生命周期的下一阶段是可见的,因此在这种情况下它将不可见。删除它后(default是validate)一切都开始工作。

@Nicolas Henneaux的回答是正确的,但是
部署
阶段
构建帮助器maven插件
是不正确的。新属性在生命周期的下一个阶段可见,因此在这种情况下它将不可见。删除它后(定义为validate)一切都开始工作。

请您解释一下,您的需求与标准的Maven行为有何不同?因为我的第一印象是,标准行为符合您的需求。我已经根据手动部署的原因进行了更新。发布或快照存储库将由您使用的版本决定。Th是指如果你使用