java maven插件API:@使用设置器的参数不起作用

emeijp43  于 2023-02-14  发布在  Java
关注(0)|答案(2)|浏览(231)

我正在为我的项目编写一个自定义maven插件。按照这里提到的说明https://maven.apache.org/guides/plugin/guide-java-plugin-development.html#using-setters我添加了一个@参数使用setters如下所示。

@Parameter(property = "destinationDirectory", defaultValue = "${project.build.directory}/generated-resources")
private String _destinationDirectory;
private Path dstDirRoot;

public void setDestinationDirectory(String destinationDirectory) {
    Path dstDir = Paths.get(destinationDirectory);
    if (dstDir.isAbsolute()) {
         this._destinationDirectory = dstDir.toString();
    } else {
         this._destinationDirectory = Paths.get(baseDir, dstDir.toString()).toString();
    }
    dstDirRoot = Paths.get(this._destinationDirectory);
}

使用端的Pom.xml条目

<plugin>
    <groupId>com.me.maven</groupId>
    <artifactId>my-maven-plugin</artifactId>
    <version>${project.version}</version>
    <executions>
        <execution>
            <goals>
                <goal>run</goal>
            </goals>
            <phase>generate-resources</phase>
        </execution>
    </executions>
    <configuration>
         <destinationDirectory>${project.build.directory}/myDir</destinationDirectory>
    </configuration>
</plugin>

现在,我期望在插件执行期间,它会调用setDestinationDirectory方法。但是它没有。@Parameter(property="...")似乎没有任何影响。
是窃听器吗?还是我漏了什么?

wsewodh2

wsewodh21#

如果我没记错的话,当注解包含property = destinationDirectory时,它将从系统属性(例如-D)或pom属性中读取一个系统属性,除非在XML中指定了配置节。

mvn generate-resources -DdestinationDirectory=/path/to/dir

如果配置是在XML中指定的(您的示例中就是这种情况),则配置的名称将与变量的名称或指定的别名(如果有)匹配。您可以尝试以下选项并检查它是否解决了问题:

设置别名:

@Parameter(alias = "destinationDirectory", defaultValue = "${project.build.directory}/generated-resources")
private String _destinationDirectory;

重命名变量:

@Parameter(defaultValue = "${project.build.directory}/generated-resources")
private String destinationDirectory;

保持配置名称和变量名称一致通常是一个好的做法,这样更容易维护。

jvlzgdj9

jvlzgdj92#

maven-plugin-plugin版本3.7.0开始,您可以简单地在公共setter方法上添加@Parameter注解。
您的代码可以如下所示:

@Parameter(...)
public void setDestinationDirectory(String destinationDirectory) {
...
}

您还需要在pom.xml中定义maven-plugin-pluginmaven-plugin-annotations依赖项的版本-两者应该具有相同的版本。

<project>

<properties>
  <maven-plugin-tools.version>3.7.1</maven-plugin-tools.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <scope>provided</scope>
    <version>${maven-plugin-tools.version</version>
  </dependency>
</dependencies>

<build>
  <pluginManagement>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-plugin-plugin</artifactId>
      <version>${maven-plugin-tools.version}</version>
      <executions>
        <execution>
          <id>help-mojo</id>
          <goals>
            <goal>helpmojo</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </pluginManagement>
</build>

</project>

相关问题