我正在为我的项目编写一个自定义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="...")
似乎没有任何影响。
是窃听器吗?还是我漏了什么?
2条答案
按热度按时间wsewodh21#
如果我没记错的话,当注解包含
property = destinationDirectory
时,它将从系统属性(例如-D
)或pom属性中读取一个系统属性,除非在XML中指定了配置节。如果配置是在XML中指定的(您的示例中就是这种情况),则配置的名称将与变量的名称或指定的别名(如果有)匹配。您可以尝试以下选项并检查它是否解决了问题:
设置别名:
重命名变量:
保持配置名称和变量名称一致通常是一个好的做法,这样更容易维护。
jvlzgdj92#
从
maven-plugin-plugin
版本3.7.0
开始,您可以简单地在公共setter方法上添加@Parameter
注解。您的代码可以如下所示:
您还需要在
pom.xml
中定义maven-plugin-plugin
和maven-plugin-annotations
依赖项的版本-两者应该具有相同的版本。