Maven mojo未从pom获取配置
我已经编写了一个Maven插件,并将其作为另一个项目包阶段的目标,该项目的pom.xml中给出了配置。但是,使用@parameter表示法设置的字段最终都不会被填充,因此它们在使用时只会抛出NullPointerException 我的魔力:Maven mojo未从pom获取配置,maven,maven-plugin,pom.xml,Maven,Maven Plugin,Pom.xml,我已经编写了一个Maven插件,并将其作为另一个项目包阶段的目标,该项目的pom.xml中给出了配置。但是,使用@parameter表示法设置的字段最终都不会被填充,因此它们在使用时只会抛出NullPointerException 我的魔力: /** * @goal wrap * @phase package */ public class MyMojo extends AbstractMojo { /** * @parameter expression="${proj
/**
* @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>
com.mycompany.wrapper
maven插件
1.0-快照
maven插件
...
org.apache.maven.plugins
maven插件
3.2
真的
魔咒描述符
描述符
我的项目pom的相关部分:
<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>
com.mycompany.wrapper
maven插件
1.0-快照
包裹
包
dcbTestData.sql
有人知道我做错了什么吗?很可能是我没有看到的愚蠢错误。您应该按照以下方式更改代码:
/**
* @parameter default-value="${project.build.directory}"
*/
private String outputDirectory;
我已经解决了这个问题。我做了一些错事,但经过改变和修补,我设法解决了 顺便说一句,Maven文档和用户指南在选择注释还是javadocs样式方面有点不一致,并且在某些地方,他们推荐不推荐的方法,例如
expression=“${stuff}”
form,这使得这个过程变得更加困难
无论如何,要让它工作:
@Mojo(name = "wrap", defaultPhase = LifecyclePhase.PACKAGE)
public class MyMojo extends AbstractMojo {
@Parameter(property="project.build.directory")
private File outputDirectory;
@Parameter(property="dbDataName")
private String dbDataName;
private File dbFile;
public void execute()
throws MojoExecutionException {
dbFile = new File(outputDirectory, dbDataName);
// Do other stuff
}
}
首先,我从未听说过一个名为
build
的构建生命周期阶段?除此之外,maven插件的配置看起来真的是错误的。你有github上的项目吗?啊,谢谢你指出这一点-我错误地编辑了maven插件的一部分,然后在试图纠正它时把它弄得一团糟!我现在已经纠正了这个问题,但是我仍然遇到同样的问题,在我的魔咒中没有初始化字段。更新后。您尚未将dbFile定义为参数,因此它不会由Maven或您在配置中给定的参数初始化,并且不能被初始化,因为它未定义为参数。谢谢。实际上,在为stackoverflow文章修改代码时,这是一个错误,它的意思是读取dbFile=new File(outputDirectory,dbDataName)
,因此dbFile不是一个参数。我已经在我的帖子中纠正了这一点。谢谢,我已经让它工作了,但是它仍然没有从pom获取配置参数(即dbDataName
参数)。有什么想法吗?在网上的某个地方?喜欢Github这样我就可以看看了?谢谢,但我终于解决了这个问题。我已经写了一个答案,详细说明了我做错了什么。谢谢你的帮助!这将失败,因为您正在将其解析为字符串
而不是文件
另一个并非真正关注的部分,但非常重要的是您使用文件
而不是字符串
(此处正确)。如果您尝试使用字符串
并尝试接收,例如${project.basedir}
,则您将接收空值。然后,当foo-${project.basedir}
工作时,您会发疯(因为串联将其转换为字符串
)。