在多模块maven项目中,如何为每个模块执行正确的目标?

时间:2014-03-04 15:18:40

标签: maven-3

我的原型中有三个maven项目:

bookman (main project)
 |-- bookman-back-lend (module, simple service app)
 \-- bookman-front-web (module, simple web app)

这是一个非常简单的示例图书借阅应用程序(用于图书馆或其他东西),以学习各种技术和所有这些。

问题是我不能让父pom在模块poms中执行目标。

在任何模块中单独调用 mvn clean package wildfly:deploy 可以正常工作。它编译,部署,战争被替换,Wildfly 8做它的事情,等等。但是如果我用 mvn clean package 打电话给父POM(我甚至不确定该怎么称......),它没有做太多 - 当然它没有部署到wildfly任何模块。 Wildfly不会让步。在父POM中,当然,调用 mvn clean package wildfly:deploy 不起作用。

这是父pom.xml:

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

  <groupId>org.mader.bookman</groupId>
  <artifactId>bookman</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Main BookMan superproject.</name>
  <description>Main BookMan superproject.</description>

  <modules>
    <module>bookman-front-web</module>
    <module>bookman-back-lend</module>
  </modules>
</project>

模块POM,为了简洁起见了一些东西(我假设它们与我的问题无关)。

书商前方的web / pom.xml中:

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

  <artifactId>bookman-front-web</artifactId>
  <packaging>war</packaging>
  <name>Frontend project - webpage.</name>
  <description>Web page to handle lending books.</description>

  <parent>
    <groupId>org.mader.bookman</groupId>
    <artifactId>bookman</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <properties>
  ...
  </properties>

  <repositories>
  ...
  </repositories>

  <dependencyManagement>
  ...
  </dependencyManagement>

  <dependencies>
  ...
  </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <defaultGoal>clean package wildfly:deploy</defaultGoal>

    <plugins>
      <plugin> <!-- To use, run: mvn clean package wildfly:deploy -->
        <groupId>org.wildfly.plugins</groupId>
        <artifactId>wildfly-maven-plugin</artifactId>
        <version>${version.wildfly.maven.plugin}</version>
      </plugin>
    </plugins>
  </build>
</project>

bookman-back-lend / pom.xml:

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

  <artifactId>bookman-back-lend</artifactId>
  <packaging>war</packaging>
  <name>Backend project - lending.</name>
  <description>Business logic to handle books, users and act of lending.</description>

  <parent>
    <groupId>org.mader.bookman</groupId>
    <artifactId>bookman</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <properties>
  ...
  </properties>

  <repositories>
  ...
  </repositories>

  <dependencyManagement>
  ...
  </dependencyManagement>

  <dependencies>
  ...
  </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <defaultGoal>clean package wildfly:deploy</defaultGoal>

    <plugins>
      <plugin> <!-- To use, run: mvn clean package wildfly:deploy -->
        <groupId>org.wildfly.plugins</groupId>
        <artifactId>wildfly-maven-plugin</artifactId>
        <version>${version.wildfly.maven.plugin}</version>
      </plugin>
    </plugins>
  </build>
</project>

应该可以为每个模块单独执行自定义目标,对吗?对?否则那些聚合POM就没用了。

不幸的是,像this这样的问题表明在父POM上执行的maven目标与在子POM上执行的目标完全相同。谁想到这样的东西?如果我在每个子模块中需要完全不同的目标怎么办?

All answers我发现它已经有几年了,也许......只是可能......理智占上风,而maven现在允许这样的事情?毕竟,所有必要的信息都应该是可访问的,比如defaultGoal标记。

1 个答案:

答案 0 :(得分:-1)

问题以激进的方式解决了。 Maven死了,万岁Gradle

我最近几天正在修补它,我已经将原型移动到实际工作的位置。虽然还有很多工作要做,但我已经知道我不会回头。

所以,是的......如果你因为各种原因而无法轻易完成或完全不能使用Maven,那么请考虑Gradle。事实上,无论如何都要考虑Gradle。