java - 如何在 Maven 中仅针对 "war"包类型运行插件?

标签 java maven war maven-plugin

提供了两个Maven项目:J(jar)、W(war);两者都依赖于一个父 P (pom)。父级有一个插件,只能为项目“W”运行。

如何做到这一点:

  • 无需创建单独的父项目
  • 不使用配置文件(因此仍然必须使用 mvn clean package 执行构建)

J( jar )

<project>
  <parent>
    <artifactId>P</artifactId>
  </parent>
  <artifactId>J</artifactId>
  <packaging>jar</packaging>
</project>

W( war )

<project>
  <parent>
    <artifactId>P</artifactId>
  </parent>
  <artifactId>W</artifactId>
  <packaging>war</packaging>
</project>

P(pom)

<project>
  <artifactId>P</artifactId>
  <packaging>pom</packaging>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <classifier>classes</classifier>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

最佳答案

我认为您可以使用 Profile Activation 实现此目的.理想情况下,激活条件应该类似于“packaging type is war”,但显然,这个条件无法在 Maven 中实现。但是,在您的情况下,有一个条件可以实现并且在实践中可能是等效的:“有一个src/main/webapp目录”。

这就是您的 pom.xml 的样子:

<profiles>
    <profile>
        <activation>
            <file>
                <exists>src/main/webapp</exists>
            </file>
        </activation>
        <build>
            [plugin configuration]
        </build>
    </profile>
</profiles>

关于java - 如何在 Maven 中仅针对 "war"包类型运行插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934504/

相关文章:

javascript - 如何从ejs获取值到node js文件

java - Java 中字符串的 == 运算符和 .equals 如何相同?

java - 如何使用 Maven Artifact 作为另一个 Artifact (或模块)的输入?

gradle - 如何使用Gradle将Jar中的所有文件包含到 war 中

java - NoClassDefFoundError 即使包含 .jar 文件

java - 如何动态编译和加载外部java类?

java - 如何跟踪 Java 异常

java - Spring MVC - 意外异常解析来自 ServletContext 资源的 XML 文档 [/WEB-INF/mvc-dispatcher-servlet.xml];

java - 是否可以在 Linux 下构建 JNI .dll?

Maven src/main/resources 不过滤