是否可以使用变量定义maven目标?

时间:2012-07-04 00:32:56

标签: maven javadoc

我的问题来自于想要运行javadoc:除了一个以外的所有项目的聚合,我想运行javadoc:javadoc(因为这个项目有一个子模块需要在其maven-javadoc中使用sourcepath设置 - 插件配置,因为它生成了代码和源代码。

据我了解,有一个错误,这意味着如果您运行聚合目标,则会忽略sourcepath设置。我自己尝试了它并没有用,我找到了:http://jira.codehaus.org/browse/MJAVADOC-311

我有一个父POM定义了插件配置:

<properties>
  <javadoc-goal>aggregate</javadoc-goal>
<properties>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <executions>
    <execution>
      <id>generate-javadoc</id>
      <phase>package</phase>
      <goals>
        <goal>${javadoc-goal}</goal>
      </goals>
      <configuration>
         ...
      </configuration>
    </execution>
  </executions>
</plugin>

然后我有几个从这个项目继承的项目。我需要运行javadoc而不是聚合的那个将定义:

<javadoc-goal>javadoc</javadoc-goal>

及其子模块将定义其源路径:

<reporting>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <sourcepath>${basedir}/src/main/java:${basedir}/src/generated/java</sourcepath>
        </configuration>

        ... 
    </plugin>
  </plugins>
</reporting>

我猜我的问题的答案是否定的,因为当我尝试安装我的父POM时,看起来它将变量视为文字,我觉得很奇怪,因为你可以在很多其他地方使用它们:

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] '${javadoc-goal}' was specified in an execution, but not found in the plugin

如果我不能这样做,有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案:

在父POM中配置javadoc插件,但不提供目标:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <executions>
    <execution>
      <id>generate-javadoc</id>
      <phase>package</phase>
      <configuration>
         ...
      </configuration>
    </execution>
  </executions>
</plugin>

每个项目POM都提供了目标:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <executions>
    <execution>
      <id>generate-javadoc</id>
      <phase>package</phase>
      <goals>
        <goal>javadoc</goal> <!-- or aggregate for those projects that require it -->
      </goals>
    </execution>
  </executions>
</plugin>