gpt4 book ai didi

java - 在 Maven 插件中找到主要 Artifact 的路径

转载 作者:行者123 更新时间:2023-11-29 04:37:39 26 4
gpt4 key购买 nike

我正在开发一个 Maven 插件来自动在服务器上安装 JAR。我的第一步应该是找到编译后的 JAR 并将其移动到服务器,但是如何找到我的 JAR?

我的第一次尝试是:

public class MyMojo extends AbstractMojo {
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
String workingPath = System.getProperty("user.dir");
File targetDir = new File(workingPath + File.separatorChar + "target");

for (File f : targetDir.listFiles()) {
if (f.isFile() && f.getName().endsWith(".jar") {
System.out.println("Found jar " + f.getName());
}
}
}
}

但我不想使用固定目录“target”。有什么方法可以知道 jar 将在哪里构建?

最佳答案

是的,执行此操作的简单方法是注入(inject) MavenProject当前正在构建的,并检索与其 Artifact 对应的文件,由 getArtifact() 返回.这适用于任何项目的打包(jarwar 等),或者 Artifact 实际生成的位置。

@Mojo(name = "foo")
public class MyMojo extends AbstractMojo {

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

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
// this is the main artifact file
File file = project.getArtifact().getFile();
getLog().info(file.toString());
}

}

这声明了名为 “foo” 的目标。它被注入(inject)值 ${project}PluginParameterExpressionEvaluator 对当前 Maven 项目求值。 .

您的 Maven 插件需要依赖于 maven-plugin-annotations (对于 @Parameter@Mojo 注释),以及对于 MavenProjectmaven-core:

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.3.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>

当然,这需要项目的 Artifact 是实际构建的,也就是说插件必须在package阶段之后运行;否则 Artifact 没有文件。

关于java - 在 Maven 插件中找到主要 Artifact 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40584981/

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