您的位置 首页 java

maven生成可执行的jar文件的两种方法

默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Class一行)。

maven 打包java程序,当执行 java -jar 文件时提示 no main manifest attribute。
为了生成可执行的jar文件,需要借助插件。

目录:

maven生成可执行的jar文件的两种方法

生成示例项目

 # 进入你想创建项目的父文件夹
cd /Volumes/RamDisk 
# 查看当前文件夹
pwd  
 # 生成项目
docker run -itd --rm --name maven_quick_tmp 
-v "$HOME/. m2 /repository":/root/.m2/repository 
-v "$PWD":/usr/src/mymaven 
-w /usr/src/mymaven 
virhuiai/maven_quick:version-aliyun  
mvn archetype:generate 
-DarchetypeArtifactId=maven-archetype-quickstart  
-DinteractiveMode=false  
-DarchetypeVersion=1.4 
-DgroupId=com.virhuiai.www  
-DartifactId=hello-world 
-DpackageName=com.virhuiai.www 
-DarchetypeVersion= RELEASE   

查看下生成的项目结构:

 tree -C hello-world  
maven生成可执行的jar文件的两种方法

其中 pom .xml的部分如下:

maven生成可执行的jar文件的两种方法

如果要指定版本号,即将jdk版本替换为1.8:

 cd hello-world/
sed -ri -e 's!<maven.compiler.source>1.7</maven.compiler.source>!<maven.compiler.source>1.8</maven.compiler.source>!g' pom.xml
sed -ri -e 's!<maven.compiler.target>1.7</maven.compiler.target>!<maven.compiler.target>1.8</maven.compiler.target>!g' pom.xml  

方法一:maven-shade-plugin

官网地址在:

   
maven生成可执行的jar文件的两种方法

按说明,在pom.xml中添加以下内容:

 < build >
。。。
<pluginManagement>
。。。
</pluginManagement>
<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        < execution s>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.virhuiai.www.App</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  

注意这是直接位于build>plugins下的,不是pluginManagement里的,否则不会有效果()。
现在执行mvn clean install:

 mvn clean install  
maven生成可执行的jar文件的两种方法

其中有句:

 Replacing /usr/src/mymaven/hello-world/target/hello-world-1.0-SNAPSHOT.jar with /usr/src/mymaven/hello-world/target/hello-world-1.0-SNAPSHOT-shaded.jar  

说明已经被替换成带有Main-Class信息的可运行jar。

现在,在项目根目录中执行该jar文件:

 root@9275e11b3f0f:/usr/src/mymaven/hello-world# java -jar /usr/src/mymaven/hello-world/target/hello-world-1.0-SNAPSHOT.jar
Hello World!  

方法二:maven-jar-plugin

       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.virhuiai.www.App</mainClass> <!--  //主程序入口类,可以按住control,单机定位到该类-->
            </manifest>
          </archive>
        </configuration>
      </plugin>
  

注意这也是直接位于build>plugins下的,不是pluginManagement里的,pluginManagement指定版本号。

文章来源:智云一二三科技

文章标题:maven生成可执行的jar文件的两种方法

文章地址:https://www.zhihuclub.com/192203.shtml

关于作者: 智云科技

热门文章

网站地图