gpt4 book ai didi

java - MavenProject 注入(inject)似乎不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:05 24 4
gpt4 key购买 nike

我尝试编写自己的 Maven 插件,并尝试使用通常的注释访问 MavenProject。但是,当我执行插件时,项目字段不会被注入(inject)并保持为空。这是我的示例代码:

package xyz;

import org.apache.maven.plugin.*;
import org.apache.maven.plugins.annotations.*;
import org.apache.maven.project.*;

/**
* @goal develop
*
*/
public class Experiment extends AbstractMojo {

@Parameter( defaultValue = "${project}", readonly = true, required = true )
protected MavenProject project;

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (project == null) {
getLog().error("Variable ${project} is null!");
} else {
getLog().info("Variable ${project} is filled!");
}
}
}

无论我尝试什么,我都无法让 Maven 自动将正确的对象注入(inject)项目字段,我总是得到该字段为空的信息。知道我做错了什么吗?

pom 文件似乎不是这里有趣的部分,因为我在构建中使用了很长时间的大 poms 得到了这种行为。但即使是最简单的 pom 文件,我也可以重现它:

 <project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>

最佳答案

以防万一有人提出这个问题:我遇到了同样的问题,MavenProject 没有像这样注入(inject)带注释的属性:

@Parameter(defaultValue = "${project}", required = true, readonly = true)
private MavenProject project;

我已经 - 在明显的预注释 mojo 示例的指导下 - 使用 Javadoc 标记 @goal 定义了目标名称,如下所示:

/**
* execute my goal
* @goal mygoal
*/
public class MyGoal extends AbstractMojo {
// goal's code goes here
}

在将其更改为使用 mojo 类的注释后一切正常,如下所示:

@Mojo(name = "mygoal")
public class MyGoal extends AbstractMojo {
// goal's code goes here
}

在我看来,如果 mojo 被指定为注释,maven 似乎只查看注释。将注解(用于字段)与 Javadoc 标记混合使用似乎无法正常工作(尽管我没有对此进行任何进一步调查)。

关于java - MavenProject 注入(inject)似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31111852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com