maven插件构建可执行jar以及maven插件tip

    技术2022-05-20  35

     

    使用 Maven 构建一个 JAR 文件比较容易:只要定义项目包装为 “jar”,然后执行包装生命周期阶段即可。但是定义一个可执行 JAR 文件却比较麻烦。采取以下步骤可以更高效:

    在您定义可执行类的 JAR 的 MANIFEST.MF 文件中定义一个 main 类。(MANIFEST.MF 是包装您的应用程序时 Maven 生成的。)找到您项目依赖的所有库。在您的 MANIFEST.MF 文件中包含那些库,便于您的应用程序找到它们。

    您可以手工进行这些操作,或者要想更高效,您可以使用两个 Maven 插件帮助您完成:maven-jar-plugin 和 maven-dependency-plugin。

    maven-jar-plugin 可以做很多事情,但在这里,我们只对使用它来修改默认 MANIFEST.MF 文件的内容感兴趣。在您的 POM 文件的插件部分添加清单 1 所示代码:

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.mypackage.MyClass</mainClass> </manifest> </archive> </configuration> </plugin>

     

    所有 Maven 插件通过一个 <configuration> 元素公布了其配置,在本例中,maven-jar-plugin 修改它的 archive 属性,特别是存档文件的 manifest 属性,它控制 MANIFEST.MF 文件的内容。包括 3 个元素:

    addClassPath:将该元素设置为 true 告知 maven-jar-plugin 添加一个 Class-Path 元素到 MANIFEST.MF 文件,以及在Class-Path 元素中包括所有依赖项。classpathPrefix:如果您计划在同一目录下包含有您的所有依赖项,作为您将构建的 JAR,那么您可以忽略它;否则使用classpathPrefix 来指定所有依赖 JAR 文件的前缀。在清单 1 中,classpathPrefix 指出,相对存档文件,所有的依赖项应该位于 “lib” 文件夹。mainClass:当用户使用 lib 命令执行 JAR 文件时,使用该元素定义将要执行的类名。

    当您使用这 3 个元素配置好了 MANIFEST.MF 文件之后,下一步是将所有的依赖项复制到 lib 文件夹。为此,使用 maven-dependency-plugin,如清单 2 所示:

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin>

     

    maven-dependency-plugin 有一个 copy-dependencies,目标是将您的依赖项复制到您所选择的目录。本例中,我将依赖项复制到build 目录下的 lib 目录(project-home/target/lib)。

    将您的依赖项和修改的 MANIFEST.MF 放在适当的位置后,您就可以用一个简单的命令启动应用程序:

    java -jar jarfilename.jar maven 插件tip 在pom中配置maven的作用是可以做一个预先的配置,并且可以配置这个插件在生命周期的某个阶段运行这个插件.每个插件都是AbstractMojo 类的实现,一个Mojo对应了插件的一个goal,goal和接收参数的名称可以在实现中用javadoc指定,如: /** * @goal greeting */ public class GreetingMojo extends AbstractMojo 插件工程的package形式是maven-plugin,install之后会在插件的jar目录META-INF/maven下形成一个插件描述文件,这个描述文件指定了 插件的基本信息,支持的goal和每个goal需要的参数等以及插件的maven依赖。 maven使用plexus作为IoC框架管理插件。

     


    最新回复(0)