maven-assembly-plugin把java工程打包成为一个可执行的jar包

用java写了一个小工具,使用maven java 工程。写完后,想打包成一个可执行的jar包。
使用maven的插件maven-assembly-plugin

pom.xml里添加

<build>
      <plugins>
        <plugin>
          <artifactId>maven-assembly-pluginartifactId>
          <configuration>
            <archive>
              <manifest>
                <mainClass>org.kuan.wang.AppmainClass>
              manifest>
            archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependenciesdescriptorRef>
            descriptorRefs>
          configuration>
        plugin>
      plugins>
    build>

执行命令:

mvn clean compile assembly:single

在target文件夹里生成MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar
这个jar包便是可执行的jar了,用命令java -jar path\jarfile便可以执行。
注意:compile必须再assembly:single之前,要不然你工程的代码(class文件)就不会被打包进去

assembly:single是maven的goal.
通常情况下,这个goal要绑定到maven build 的phase里,这样它就可以自动执行。mvn package是用来打包jar包的。只是jar包不可执行。
在以上的pom文件里加

<plugin>
  <artifactId>maven-assembly-pluginartifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>org.kuan.wang.AppmainClass>
      manifest>
    archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependenciesdescriptorRef>
    descriptorRefs>
  configuration>
  <executions>
    <execution>
      <id>make-assemblyid> 
      <phase>packagephase> 
      <goals>
        <goal>singlegoal>
      goals>
    execution>
  executions>
plugin>

这样的话直接运行以下命令就行了。

mvn clean package

另外有几点要注意。
1. 必须要有

<archive>
     <manifest>
          <mainClass>org.kuan.wang.AppmainClass>
     manifest>
archive>

否则会报错
no main manifest attribute, in target\MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar
是你自己工程的入口。
2. 使用mvn clean compile assembly:single,只生成一个jar包,名字里有jar-with-dependencies,可执行。
使用mvn package生成两个jar包,名字里有jar-with-dependencies的jar是可执行的。
3. 如果使用assembly
用命令mvn assembly:assembly会生成两个jar包。跟使用了mvn package一样
无需再像命令assembly:single一样前面必须加compile.

你可能感兴趣的:(Maven)