使用 Maven 将 spring boot 可执行文件部署到 Nexus

Deploy springboot executable with Maven to Nexus

我正在使用 Maven 构建我的可执行文件 Spring-Boot,我还使用 spring-boot-maven-plugin。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.psmonster.wfe</groupId>
  <artifactId>saxon</artifactId>
  <packaging>jar</packaging>
  <version>0.1.1</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
  </parent>

  <pluginRepositories>
      <pluginRepository>
          <id>maven2</id>
          <url>https://repo.maven.apache.org/maven2/</url>
      </pluginRepository>
  </pluginRepositories>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxp-api</artifactId>
      <version>1.4.2</version>
    </dependency>
    <dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>Saxon-B</artifactId>
      <version>9.0</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>  
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-consul-dependencies</artifactId>
      <version>1.0.0.RELEASE</version>
      <type>pom</type>
    </dependency>

  </dependencies>
  <distributionManagement>
    <repository>
      <id>central</id>
      <name>saxon-releases</name>
      <url>${env.MAVEN_REPO_URL}/repository/WFESRV/</url>
    </repository>
  </distributionManagement>

  <properties>
    <java.version>1.8</java.version>
  </properties>

 <build>
    <pluginManagement>
      <plugins>
        <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>2.8.1</version>
           <executions>
              <execution>
                 <id>default-deploy</id>
                 <phase>deploy</phase>
                 <goals>
                    <goal>deploy</goal>
                 </goals>
              </execution>
           </executions>
        </plugin>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.2.2.RELEASE</version>
        <executions>
         <execution>
          <goals>
           <goal>repackage</goal>
          </goals>
         </execution>
        </executions>
       </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
        </plugin>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.7.0.1746</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
              <archive>
                <manifest>
                <mainClass>base.Application</mainClass>
                </manifest>
              </archive>
            </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

当我运行这个:

mvn  $MAVEN_CLI_OPTS clean package spring-boot:repackage -Dmaven.test.skip=true -q

myPSMonster.jar 构建良好,我可以 运行 在我的 Docker 容器中。 所以我只想将它推送到我的 Nexus Artifactory,我只是在重新打包后添加 deploy 。 然后 nice jar 将被覆盖,一个只有编译代码的小 jar 将被推送。

有人知道如何在不使用 deploy:deploy-file 的情况下解决这个问题吗?

为什么不使用 maven deploy 插件来部署存档。还有其他插件可用于执行此任务。如果您使用的是 jenkins,部署设置也可以通过 jenkins 插件进行不同的管理。但是现在,在本地机器上使用 maven,我们可以使用 nexus 服务器凭据设置 .m2 settings file。之后,您可以使用以下配置 pom.xml :

<distributionManagement>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <url>${repository_url}</url>
    </snapshotRepository>
</distributionManagement>

以上部分将告诉 maven 在部署期间将工件推送到何处process.Once这是设置,您可以使用插件:

<plugin>
   <artifactId>maven-deploy-plugin</artifactId>
   <version>2.8.1</version>
   <executions>
      <execution>
         <id>default-deploy</id>
         <phase>deploy</phase>
         <goals>
            <goal>deploy</goal>
         </goals>
      </execution>
   </executions>
</plugin

Maven-deploy 插件链接到 Maven 生命周期的 deployment 阶段。然后您可以使用以下命令将 jar/war 推送到存储库:

mvn clean deploy -Dmaven.test.skip=true

所以。最后它用这个修复了它:

- mvn $MAVEN_CLI_OPTS deploy:deploy-file -DpomFile=pom.xml -DrepositoryId=central
                              -Dfile=target/saxon-0.1.$CI_PIPELINE_ID.jar
                              -Durl=http://psmonster:8081/repository/WFESRV/