新建maven项目,选择maven-archetype-quickstart,编写完进入项目根目录,使用mvn package命令打包,进入target目录,使用java -jar xx.jar命令运行文件,报错:“没有主清单属性”。
查阅资料,根据这篇博文的提示,在pom.xml文件中添加配置项:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xx.xx.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
重新打包运行,无效。
继续,根据这篇博文的提示,修改配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>xx.xx.Application</mainClass> <!-- 此处为主入口-->
</manifest>
</archive>
</configuration>
</plugin>
重新打包运行,出现ClassNotFoundException。
返回程序观察,应该是打包时丢失依赖,根据博文的提示,使用maven-jar-plugin和maven-dependency-plugin插件打包:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>xx.xx.SpringStart</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
重新打包运行,成功。
本文介绍了在创建新的Maven项目并尝试打包运行时遇到的'没有主清单属性'错误。通过查阅资料和修改pom.xml配置,包括添加缺失的配置项,使用maven-jar-plugin和maven-dependency-plugin来处理依赖,最终成功解决了ClassNotFoundException问题,使得项目能够正常运行。
6034





