是否可以指定对特定maven阶段的依赖?

时间:2013-11-17 22:16:32

标签: maven docbook

我正在使用maven-docbkx-plugin从docbook源生成HTML和PDF输出。我有几本书,这些书使用olinks相互链接。

olink数据库是在一个maven阶段(generate-resources)生成的,查找此数据库的实际HTML和PDF生成在后续的maven阶段(编译)中执行。

我已将maven项目划分为多模块项目,因为每本书都包含数十个子文档。 docbkx-maven-plugin配置全部在父级中完成,然后它只是需要在子POM中指定的顶级docbook源。

但是......这在依赖性方面不起作用,因为每个模块都要求在运行其编译阶段之前运行每个其他模块的generate-resources,以便它可以访问每个模块的olink数据库。其他书籍。

有没有办法在maven中这样做?或者我是否需要重新构建两个maven项目(这将大大打破这个项目的模块性,因为所有配置都需要在每个项目中声明)?

父POM的结构是:            ...                                

  <build>
    <plugins>  
      <pluginManagenent>
        <plugin>
          <groupId>com.agilejava.docbkx</groupId>
          <artifactId>docbkx-maven-plugin</artifactId>
          <version>2.0.14</version>
          <executions>
            <execution>
              <id>xrefdb</id>
              <phase>generate-resources</phase>
              <configuration>
              ...
              </configuration>
              <goals>
                <goal>generate-html</goal>
              </goals>
            </execution>

            <execution>
              <id>html</id>
              <phase>compile</phase>
              <configuration>
              ...
              </configuration>
              <goals>
                <goal>generate-html</goal>
              </goals>
            </execution>
          </executions>
        </plugin>          
      </pluginManagement>
    </plugins>
  </build>

</project>

模块:

<project>
  ...

  <build>
    <plugins>

      <plugin>
        <groupId>com.agilejava.docbkx</groupId>
        <artifactId>docbkx-maven-plugin</artifactId>
        <version>2.0.14</version>

        <configuration>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>     
</project>

2 个答案:

答案 0 :(得分:1)

我已经对此进行了更多的研究,从我所读到的,我所要求的是不可能的(但我很乐意以其他方式建议)。我将我的项目拆分为两个,并给他们一个共同的父母,他们可以从中绘制他们的共同配置。

答案 1 :(得分:0)

我解决此问题的另一种方法是使用maven配置文件。我执行第一个配置文件中所有模块的第一次传递,然后在第二个配置文件中执行第二次传递。

这意味着项目必须运行两次才能构建所有工件,但它比在多个项目中传播源代码更具可维护性。