您的位置:首页 > 其它

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

2011-03-01 15:34 281 查看
使用 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框架管理插件。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: