Java 在Maven插件中找到主工件的路径
我正在开发一个Maven插件,用于在服务器上自动安装JAR。对我来说,第一步应该是找到已编译的JAR并将其移动到服务器,但是如何找到我的JAR呢 我的第一次尝试是:Java 在Maven插件中找到主工件的路径,java,maven,jar,maven-plugin,Java,Maven,Jar,Maven Plugin,我正在开发一个Maven插件,用于在服务器上自动安装JAR。对我来说,第一步应该是找到已编译的JAR并将其移动到服务器,但是如何找到我的JAR呢 我的第一次尝试是: public class MyMojo extends AbstractMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { String workingPath = S
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将在哪里构建?您可以使用
project.build.directory
、project.build.finalName
和project.packaging
的值,将存档路径构建为插件参数的默认值,例如:
public class MyMojo extends AbstractMojo {
/**
* @parameter default-value="${project.build.directory}/${project.build.finalName}.${project.packaging}"
*/
private String archivePath;
public void execute() throws MojoExecutionException {
File archive = new File(archivePath);
...
}
}
是的,实现这一点的简单方法是注入当前正在构建的,并检索其工件对应的文件,如返回的。无论项目的包装是什么(
jar
,war
,等等),或者工件是在什么地方实际生成的,这都是有效的
@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”
的目标。它被注入值${project}
,该值由
您的Maven插件需要依赖于(对于and注释)和Maven项目的Maven核心
:
<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>
org.apache.maven
马文堆芯
3.3.9
org.apache.maven.plugin-tools
maven插件注释
3.5
假如
当然,这需要实际构建项目的工件,也就是说插件必须在包阶段之后运行;否则,工件没有文件。这只是解决方案的一部分;工件的最终名称及其包装仍然需要检索。而且它实际上并不适用于所有情况,因为用户可以为JAR插件设置自定义,不同于构建目录。最后注意,插件参数的Javadoc注释是Maven 2的老方法。Maven3(及以上版本)更喜欢Java注释。谢谢,这就是我想要的。正如您在评论中所说,我不想使用固定目录,因为outputDirectory可以很容易地以不同的方式定义