有点时候我们项目不是通过IDEA 向导生成的spring-boot项目文件,我们直接打出的jar包,通过java -jar xxxx.jar命令执行,报出xxx.jar中没有清单属性错误,这个时候我们需要指定jar的main入口和在jar包的MANIFEST.MF文件中生成Class-Path属性,
我们修改pom.xml文件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<!-- 指定Main方法入口的class -->
<mainClass>com.jojo.sun.collector.backup.launcher.Launcher</mainClass>
<!-- 在jar包的MANIFEST.MF文件中生成Class-Path属性 -->
<addClasspath>true</addClasspath>
<!-- Class-Path 前缀 -->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<!-- 把本地的第三方jar包添加到MANIFEST.MF文件中,可以解压打包后的jar包查看MANIFEST.MF文件 -->
<!--
Class-Path: 指定当前jar包执行所依赖的classpath,包括本地的第三方jar包和maven引入的jar包
Class-Path: lib/slf4j-api-1.7.13.jar lib/junit-3.8.1.jar
Main-Class: 指定当前jar包的入口class
Main-Class: com.birdben.App
-->
</archive>
</configuration>
</plugin>
<!-- 拷贝依赖的jar包到lib目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory} 构建目录,缺省为target -->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>