package com.ksyun.train.plugins; import com.sun.tools.javac.util.List; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; import java.io.File; import java.io.IOException; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; // ⽬标名统⼀为bootJar @Mojo(name="bootJar") public class BootJarMojo extends AbstractMojo { // 可⾃由获取maven内置变量 @Parameter(defaultValue = "${settings.localRepository}", required = true) private String localRepository; // 接收通过命令mvn -Dmain.class=com.ksyun.train.App传递的参数, 请勿修改参数名 @Parameter(property = "main.class", required = true) private String mainClass; // maven项⽬信息,需要的数据基本都可以从此对象中获取, // 请⾃⾏调试打印观察project信息,开发过程中可利⽤json⼯具打印该对象信息 @Component protected MavenProject project; // 请实现插件的核⼼逻辑⽅法execute public void execute() throws MojoFailureException { getLog().info("project localRepository is " + localRepository); File baseDir = project.getBasedir(); getLog().info("project base dir is " + baseDir); String artifactId = project.getArtifactId(); String version = project.getVersion(); File targetDirectory = new File(baseDir, "target"); File classesDirectory = new File(targetDirectory, "classes"); getLog().info("project classes dir is " + classesDirectory.getAbsolutePath()); // get project dependency jars, ignore dependency transfer, only one demo // 获取项目依赖的jar包文件 List<File> dependencyFiles = (List<File>) project.getDependencyArtifacts() .stream() .map(Artifact::getFile) .filter(Objects::nonNull) .collect(Collectors.toList()); } }
这段代码是一个自定义的Maven插件,名为BootJarMojo
。它继承了AbstractMojo
类,并注解了@Mojo(name="bootJar")
,表示该插件的目标名为bootJar
。
该插件包含了一些成员变量和方法,以及一个execute()
方法作为插件的核心逻辑。
在成员变量方面,有以下几个注解标记的变量:
@Parameter(defaultValue = "${settings.localRepository}", required = true)
:表示获取Maven内置变量${settings.localRepository}
的值,并赋给localRepository
变量。该变量用于存储项目本地仓库的路径。@Parameter(property = "main.class", required = true)
:表示接收通过命令行参数-Dmain.class=com.ksyun.train.App
传递的值,并赋给mainClass
变量。该变量用于存储主类的全限定名。@Component
:表示将Maven项目对象注入到project
变量中。该变量可以用于获取项目的各种信息。
在execute()
方法中,首先通过日志输出了项目本地仓库和项目基本目录的路径信息。
然后,通过project.getBasedir()
获取项目的基本目录,并将其赋给baseDir
变量。
接着,通过project.getArtifactId()
和project.getVersion()
获取项目的artifactId和版本号,并分别赋给artifactId
和version
变量。
然后,通过指定的基本目录和目标目录(target)创建了一个文件对象classesDirectory
,表示项目的类文件目录。
最后,通过调用project.getDependencyArtifacts()
获取项目的依赖项,并使用流式操作将依赖项转换为文件对象的列表。过滤掉为空的文件对象,然后将结果收集到列表中,赋给dependencyFiles
变量。
该方法的作用是获取项目信息、依赖项和其他参数,用于后续的操作或者记录日志。具体的使用场景和功能需要结合代码上下文来确定。
相关推荐
















