我们有一个第三方的罐子放在内部的手工作坊里.我们必须将其包装为docker图像并持久化在docker注册表中.我们已经有了CI流程来构建一个Maven项目,并用docker包装和部署它.但在这种情况下,不需要额外的Java构建过程,因为它是一个可运行的第三方JAR.

我知道作为CI步骤的一部分,我们可以这样做,然后继续对接构建

mvn dependency:copy -Dartifact=<org:artifact:version> -DoutputDirectory=<Path>/target

但这需要一个定制的CI步骤来适应这一点.QN:有没有什么方法可以避免这个特殊的CI步骤,比如使用虚拟包装器pom.xml来下载第三方JAR并将其作为构建输出.

不嫁给maven,它也可以gradle.

推荐答案

"复制"部分看起来微不足道:您只需要将相应的maven-dependency-plugin配置添加到pom.xml,并将适当的生命周期阶段分配给copy目标,例如,下面的配置:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>copy</id>
   <goals>
    <goal>copy</goal>
   </goals>
   <phase>prepare-package</phase>
   <configuration>
    <artifactItems>
     <artifactItem>
      <groupId>tld.group</groupId>
      <artifactId>artifact</artifactId>
      <version>version</version>
      <outputDirectory>${project.build.directory}</outputDirectory>
      <destFileName>copy-of-artifact.jar</destFileName>
     </artifactItem>
    </artifactItems>
   </configuration>
  </execution>
 </executions>
</plugin>

导致maven在构建生命周期期间将所需的jar复制到目标目录中.

至于"将第三方jar标记为构建输出"部分,有几个选项:

基本上,您可以将unpack个第三方JAR放入类目录,并要求maven-jar-plugin不创建 list :


<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <configuration>
  <useDefaultManifestFile>true</useDefaultManifestFile>
 </configuration>
</plugin>

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>unpack</id>
   <goals>
    <goal>unpack</goal>
   </goals>
   <phase>prepare-package</phase>
   <configuration>
    <artifactItems>
     <artifactItem>
      <groupId>tld.group</groupId>
      <artifactId>artifact</artifactId>
      <version>version</version>
      <outputDirectory>${project.build.directory}/classes</outputDirectory>
     </artifactItem>
    </artifactItems>
   </configuration>
  </execution>
 </executions>
</plugin>

Ii.另一种 Select 是通过禁用maven-jar-plugin并使用gmavenplus-plugin修改项目状态来欺骗maven构建:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <executions>
  <execution>
   <id>default-jar</id>
   <phase>none</phase>
  </execution>
 </executions>
 <configuration>
  <skip>true</skip>
 </configuration>
</plugin>

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>copy</id>
   <goals>
    <goal>copy</goal>
   </goals>
   <phase>prepare-package</phase>
   <configuration>
    <artifactItems>
     <artifactItem>
      <groupId>tld.group</groupId>
      <artifactId>artifact</artifactId>
      <version>version</version>
      <outputDirectory>${project.build.directory}</outputDirectory>
      <destFileName>${project.build.finalName}.jar</destFileName>
     </artifactItem>
    </artifactItems>
   </configuration>
  </execution>
 </executions>
</plugin>

<plugin>
 <groupId>org.codehaus.gmavenplus</groupId>
 <artifactId>gmavenplus-plugin</artifactId>
 <version>1.13.1</version>
 <executions>
  <execution>
   <phase>none</phase>
   <goals>
    <goal>execute</goal>
   </goals>
   <configuration>
    <bindAllProjectProperties>true</bindAllProjectProperties>
    <scripts>
     <script><![CDATA[
project.artifact.file = new File("${project.build.directory}/${project.build.finalName}.jar")
  ]]></script>
    </scripts>
   </configuration>
  </execution>
 </executions>
 <dependencies>
  <dependency>
   <groupId>org.codehaus.groovy</groupId>
   <artifactId>groovy-all</artifactId>
   <version>3.0.9</version>
   <type>pom</type>
   <scope>runtime</scope>
  </dependency>
 </dependencies>
</plugin>

Java相关问答推荐

是否可以从@ TrustMapping中删除特定方法的基路径?

在FML中删除关键帧动画

RDX触发ChoiceBox转换器(并按字符串值排序)

Java 8中的多个字段和计数

调用引发泛型异常的泛型方法时出现编译错误

如何找到MongoDB文档并进行本地化?

具有阻塞方法的开源库是否应该为执行提供异步选项?

通过Spring Security公开Spring Boot执行器端点

在添加AdMob时无法为Google Play构建应用程序包:JVM垃圾收集器崩溃和JVM内存耗尽

如何将Pane的图像快照保存为BMP?

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

将ByteBuffer异步写入InputStream或Channel或类似对象

如何以编程方式保存workBench.xmi?

从泛型枚举创建EnumMap

泛型与泛型问题的完美解决方案?

如何在SWT菜单项文本中保留@字符

我无法在我的Spring Boot应用程序中导入CSV依赖项

在Spring Boot中使用咖啡因进行缓存

这是JavaFX SceneBuilder的错误吗?