自定义Maven插件@Parameter注解Setter方法不生效问题排查
问题分析与解决
你的问题出在**@Parameter注解的位置**——Maven插件的参数绑定逻辑里,当注解标注在字段上时,会直接通过反射给字段赋值,不会触发对应的setter方法。要让setDestinationDirectory被调用,你需要调整注解的位置。
解决方案:将@Parameter移到setter方法上
修改插件代码,把@Parameter注解从字段_destinationDirectory移到setDestinationDirectory方法上:
private String _destinationDirectory; private Path dstDirRoot; @Parameter(property = "destinationDirectory", defaultValue = "${project.build.directory}/generated-resources") 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); }
补充说明
- Maven插件参数绑定规则:
- 注解在字段上:直接反射赋值,跳过setter
- 注解在setter上:调用setter完成赋值,这也是你需要的触发逻辑
- 确保
baseDir已正确注入:如果baseDir指向项目根目录,需要给它也添加@Parameter注解,示例:@Parameter(property = "project.basedir", readonly = true) private File baseDir;
内容的提问来源于stack exchange,提问作者Kiran Mohan
相关产品推荐
相关产品推荐

