我是使用Spring Initializr创建的SpringBoot项目,下面看下给我自动生成的pom文件,一切看着都那么正常~
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.zhixi.SpringbootPage404Application</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
这样一看没有问题,使用IDEA写代码也是非常的顺利,但是有个事情,我将这个小项目打包成jar包想要通过:java -jar xxx.jar的方式运行,但是确报错了,正如标题所说:没有主清单属性~
说的也是,就算我他喵的项目再小,也不能打包后只有几百kb吧!一个项目随随便便一个jar包不得几MB啊,丢。
其实问题很简单,还是自己太菜了,先来说下解决方法,再来解释下这些参数的含义,去除:<skip>true</skip>,即可,它的作用是:告诉 Maven 在执行打包命令时跳过该插件
解释下这些配置含义:
这是一个Maven项目的配置文件:
主要包括两个部分:<dependencyManagement> 和 <build>。
<dependencyManagement>
部分主要用于管理项目中使用的依赖包,它包含一个 <dependencies> 标签,里面包含了一个 <dependency> 标签。
这里的 <dependency> 标签指定了项目使用的 org.springframework.boot:spring-boot-dependencies 依赖包的版本号为 ${spring-boot.version},类型为 pom,作用域为 import。
意味着所有项目的依赖都会继承这个版本号,不需要在其他地方重复指定。
<build> 部分主要用于指定项目的构建方式和构建插件。
这里包含两个 <plugin> 标签,分别指定了 maven-compiler-plugin 和 spring-boot-maven-plugin 插件的配置信息。
1.maven-compiler-plugin 插件用于编译项目代码,这里指定了插件版本号为 3.8.1,并且配置了编译器的源代码版本和目标字节码版本都为 1.7,编码为 UTF-8。
2.spring-boot-maven-plugin 插件用于打包 Spring Boot 项目为可执行的 Jar 文件,这里同样指定了插件的版本号为 ${spring-boot.version},并且配置了插件的一些参数。
比如指定了程序的入口类 com.zhixi.SpringbootPage404Application
并且设置了 skip 参数为 true,意味着在构建时不会执行该插件。
同时,在 <executions> 标签中还指定了一个 <execution> 标签,其中的 <goal> 标签指定了该插件的目标为 repackage,表示在打包时将依赖的 Jar 文件打包到生成的 Jar 文件中。