我编写了一个Maven插件,并将其作为另一个项目的包阶段中的目标,并在该项目的pom.xml中给出了配置。但是,使用@parameter表示法设置的字段最终都不会被填充,因此它们只会在使用时抛出NullPointerExceptions。
我的魔力:
/**
* @goal wrap
* @phase package
*/
public class MyMojo extends AbstractMojo {
/**
* @parameter expression="${project.build.directory}"
*/
private String outputDirectory;
/**
* @parameter
*/
private String dbDataName;
private File dbFile;
public MyMojo(){
dbFile = new File(outputDirectory, dbDataName) // throws nullpointerexception
}
public void execute() throws MojoExecutionException{
// Do stuff
}
}
一些mojo pom:
<groupId>com.mycompany.wrapper</groupId>
<artifactId>something-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
</configuration>
<executions>
<execution>
<id>mojo-descriptor</id>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我项目的相关内容:
<plugin>
<groupId>com.mycompany.wrapper</groupId>
<artifactId>something-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>wrap</goal>
</goals>
<configuration>
<dbDataName>dcbTestData.sql</dbDataName>
</configuration>
</execution>
</executions>
</plugin>
谁能看到我在这里做错了什么?很可能是我只是没有看到的一些愚蠢的错误。
答案 0 :(得分:4)
我已经解决了这个问题。我做了一些错事,但在改变和修补之后,我设法解决了。
顺便说一句,由于Maven文档和用户指南在是否更喜欢注释或javadocs样式方面有点不一致,而且在某些地方他们建议使用弃用的方法,例如{{ 1}}形式。
无论如何要让它发挥作用:
所以这就是我的mojo现在的样子:
expression="${stuff}"
答案 1 :(得分:2)
您应该更改以下代码:
/**
* @parameter default-value="${project.build.directory}"
*/
private String outputDirectory;