Maven mojo未从pom获取配置

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

我已经编写了一个Maven插件,并将其作为另一个项目包阶段的目标,该项目的pom.xml中给出了配置。但是,使用@parameter表示法设置的字段最终都不会被填充,因此它们在使用时只会抛出NullPointerException

我的魔力:

/**
 * @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,这使得这个过程变得更加困难

无论如何,要让它工作:

  • 我纠正了他在第一次评论中指出的错误,我在pom中稍微弄乱了maven插件的定义
  • 我更新了基于Java注释的表示MOJO和参数的方法(如果我没有执行这一步而执行第3步,这可能会起作用,但更新似乎仍然是一个好主意)
  • 主要的问题是,我试图访问构造函数中的参数变量来为其他变量赋值,但是mojo在execute()方法运行之前不会获取配置细节。因此,我只是将所有使用参数的变量赋值移到execute()方法的开头,然后它们就开始工作了
  • 现在我的魔咒是这样的:

    @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}
    工作时,您会发疯(因为串联将其转换为
    字符串
    )。