Maven项目如何打出独立可运行的jar包

Maven打独立运行jar包报错,无法运行

  • 1.需求及问题
    • 问题1:no main manifest attribute, in xxx.jar
    • 问题2:Could not find or load main class com.xx.zz.ScoketClient2
  • 2.解决方案

1.需求及问题

需求很简单,就是想把本地的项目打成jar包,放到服务器上,使用java -jar xxx.jar 运行项目。
项目也很简单,就一个java类,类中有一个main方法,还有一些pom依赖。
项目打包扔到服务器上运行时,遇到了以下问题,记录一下。

问题1:no main manifest attribute, in xxx.jar

在这里插入图片描述

原因:经过后续的查询,我认为产生这个问题的原因是在项目清单里没有指定主类导致的。
说人话:在jar包的META-INF目录下,MAINFEST.MF文件中没有Main-Class这一项。

问题2:Could not find or load main class com.xx.zz.ScoketClient2

在这里插入图片描述
原因:MAINFEST.MF中有Main-Class后,但是由于其他依赖的jar包找不到,所以报错。(这是我的猜测~~)
说人话:MAINFEST.MF文件中,还有一项叫Class-Path,这个属性指定了项目依赖的jar包所在的目录地址,由于找不到jar包报错,所以感觉这里报的错误有些不对头~
Maven项目如何打出独立可运行的jar包_第1张图片

2.解决方案

解决方案当然是百度+谷歌了~毕竟我菜
找了一堆的解决办法,还好最后真的解决了问题,总结一下,希望能帮助大家少走弯路。

上代码:

<build>
    <finalName>xxxx</finalName><!--文件名 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source><!-- 我本地java是1.8 -->
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                        <includeScope>compile</includeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath><!-- 添加依赖jar包 -->
                        <classpathPrefix>lib/</classpathPrefix><!-- 依赖jar包的目录,也是MAINFEST.MF文件中的前缀 -->
                        <mainClass>com.xx.zz.Test</mainClass><!-- 指定主类 -->
                    </manifest>
                </archive>
                <!--过滤掉不希望包含在jar中的文件 -->
                <excludes>
                    <exclude>${project.basedir}/xml/*
                
            
        
    

我就是把以上配置,加到pom文件中,再打包(用的Maven package命令),除了生成一个jar包外还有一个lib目录,这里就是项目所依赖的jar包了。
Maven项目如何打出独立可运行的jar包_第2张图片

然后将jar包和lib目录都扔到服务器上(目录问题自己注意一下哈),然后我的问题就基本解决了。java -jar xxx.jar —— 运行成功。
Maven项目如何打出独立可运行的jar包_第3张图片

我很菜,希望不要误导你的思路。

转载请附带原文链接~~

你可能感兴趣的:(疑难杂症,java,maven,jar)