gpt4 book ai didi

java - 如何选择运行哪些maven执行?

转载 作者:行者123 更新时间:2023-12-02 05:32:11 24 4
gpt4 key购买 nike

设置

我有一个复杂的项目,我正在尝试使用 Maven 构建。以下是该项目的简化示例。目录结构如下:

  • main - 该项目有多个“耳朵”,每个耳朵都包含多个“ war ”以及其他支持 jar。然而,它们共享一组通用的 WSDL/XSD 以及 Java 代码。
    • pom.xml - 这是主要的 pom.xml 文件,我将在下面更详细地描述它。
    • common-code-one - 两个“ear”包有一个共同的代码体,它只是 java 代码,没有 wsdl,没有 xsd,所以没问题。
    • wsdl - 包含所有 XSD 和 WSDL 文件的单个包,它有一个 pom.xml,将其全部打包到一个 jar 文件中,以便以后在子目录中使用。
    • 耳包一
      • common-code-two - 'wsdl' 中的一些 XSD 在这里解压,并通过 jaxb2 转换为代码。作为其中的一部分,会生成一个剧集文件。
      • war-package-one - 更多 XSD 和 WSDL 文件在此处解压,并通过 jaxws 转换为代码。为了避免出现重复的代码,我需要“common-code-two”中的剧集文件,并且我需要“wsdl”中的 XSD/WSDL 文件。
      • war-package-two - 不同的 XSD/WSDL,但我仍然需要 common-code-two 中的剧集文件以及“wsdl”中的 XSD/WSDL。
      • ejb-package-one - 不需要“wsdl”中的任何内容,但可能需要“common-code-two”中的一些代码,而不需要剧集文件。
      • ...
    • 耳包二
      • common-code-two - 相同的问题,不同的 XSD。
      • ejb-package-two - 相同的问题,不同的代码。
      • war-package- Three - 相同的问题,不同的 XSD/WSDL。
      • war-package-four - 相同的问题,不同的 XSD/WSDL。

现在,主要的“pom.xml”文件。遵循 Maven 的 DRY 原则,我将 maven-dependency-plugin 的两次执行都放入了主 pom.xml 中。问题是,在上面的一些子包中,我只希望运行“unpack-schema”执行,而在其他子包中,我想要“unpack-schema”和“unpack-common-”两者绑定(bind)'来运行。当然,对于那些不需要的,我只是不将依赖插件添加到构建列表中。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>

<execution>
<id>unpack-schema</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.foo.bar</groupId>
<artifactId>wsdl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
<includes>${schema.include.list}</includes>
</artifactItem>
</artifactItems>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>

<execution>
<id>unpack-common-binding</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.foo.bar</groupId>
<artifactId>${common.code.jar}</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
<includes>**/commonCode.xml</includes>
</artifactItem>
</artifactItems>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>

</executions>
</plugin>

问题

我应该在子项目的 pom.xml 文件中放入什么,以便只执行所需的操作?

如果我简单地输入

  <build>
<plugins>
...
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
...
</plugins>
</build>

然后两次执行都会发生。在“war”包中,没关系,这就是我想要发生的事情,但在“common-code”包中,我只希望发生“unpack-schema”执行。

我见过this question但它从未得到真正的回答,并且注释的解决方案(运行多个构建)并不适合我的环境。这将经历持续集成/构建,因此必须直接编译。没有脚本,没有多个构建过程。

最佳答案

很简单,大多数插件都有 <skip/>配置项、依赖插件也不异常(exception)!

所以,你可以用<skip/>覆盖common-code的pom禁用某个执行!例如:

 <execution>
<id>unpack-schema</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>

顺便说一句:给您一个提示:对于多模块项目,在父 pom.xml 中配置的插件将在所有子模块上运行,除非您使用 ! 在子模块的 pom.xml 上禁用它

祝你好运!

关于java - 如何选择运行哪些maven执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25417048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com