解决:运行jar命令提示没有主清单属性、pom.xml配置及属性解析
一、解决办法
在pom.xml中添加/修改maven打包依赖:
org.springframework.boot spring-boot-maven-plugin repackage
二、错误实例
org.springframework.boot spring-boot-maven-plugin org.springframework.boot spring-boot-maven-plugin
三、原因分析
1.出错现象
2.主清单属性
主清单属性是jar包中MANIFEST.MF文件中的属性,这里主要造成问题的属性是Main-Class: com.tl.SecurityAPP
文件位置在我们我打的jar包下META-INF文件夹下
3.当我们将打包插件依赖删除后会发现项目照样可以打包,由此可见我们出错是因为使用了原始maven打包,并没有使用我们添加的打包插件打包。
没有使用打包插件时在项目中打开MANIFEST.MF文件会发现有Main-Class属性,当打开jar包会发现里面的MANIFEST.MF并没有此属性。
使用打包插件后发现MANIFEST.MF有此属性,且多了xxx.jar.original的文件而且jar包结构也不一样。
四.打包依赖分析
org.springframework.boot spring-boot-maven-plugin repackage
1. 说明
2.对比出错依赖配置我们会发现多了点:
repackage
repackage有啥用呢?
1.将原始Maven打包形成的jar包进行重新打包,包含应用类文件、配置文件、应用所依赖的jar包、Springboot启动相关类(loader等)。
2.将原始Maven打包形成的jar包备份,并重命名为xxxxxx.jar.original,所以我们发现使用打包插件比原始打包方式多了此文件。
3.使用打包插件打包后我们会发现jar包可以启动了
五、附:pom.xml配置解析
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <artifactId/> <groupId/> <version/> <relativePath/> parent> <modelVersion>4.0.0modelVersion> <groupId>asia.banseongroupId> <artifactId>banseon-maven2artifactId> <packaging>jarpackaging> <version>1.0-SNAPSHOTversion> <name>banseon-mavenname> <url>http://www.baidu.com/banseonurl> <description>A maven project to study maven.description> <prerequisites> <maven/> prerequisites> <issueManagement> <system>jirasystem> <url>http://jira.baidu.com/banseonurl> issueManagement> <ciManagement> <system/> <url/> <notifiers> <notifier> <type/> <sendOnError/> <sendOnFailure/> <sendOnSuccess/> <sendOnWarning/> <address/> <configuration/> notifier> notifiers> ciManagement> <inceptionYear/> <mailingLists> <mailingList> <name>Demoname> <post>banseon@126.compost> <subscribe>banseon@126.comsubscribe> <unsubscribe>banseon@126.comunsubscribe> <archive>http:/hi.baidu.com/banseon/demo/dev/archive> mailingList> mailingLists> <developers> <developer> <id>HELLO WORLDid> <name>banseonname> <email>banseon@126.comemail> <url/> <roles> <role>Project Managerrole> <role>Architectrole> roles> <organization>demoorganization> <organizationUrl>http://hi.baidu.com/banseonorganizationUrl> <properties> <dept>Nodept> properties> <timezone>-5timezone> developer> developers> <contributors> <contributor> <name/><email/><url/><organization/><organizationUrl/><roles/><timezone/><properties/> contributor> contributors> <licenses> <license> <name>Apache 2name> <url>http://www.baidu.com/banseon/LICENSE-2.0.txturl> <distribution>repodistribution> <comments>A business-friendly OSS licensecomments> license> licenses> <scm> <connection> scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) connection> <developerConnection> scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk developerConnection> <tag/> <url>http://svn.baidu.com/banseonurl> scm> <organization> <name>demoname> <url>http://www.baidu.com/banseonurl> organization> <build> <sourceDirectory/> <scriptSourceDirectory/> <testSourceDirectory/> <outputDirectory/> <testOutputDirectory/> <extensions> <extension> <groupId/> <artifactId/> <version/> extension> extensions> <defaultGoal/> <resources> <resource> <targetPath/> <filtering/> <directory/> <includes/> <excludes/> resource> resources> <testResources> <testResource> <targetPath/><filtering/><directory/><includes/><excludes/> testResource> testResources> <directory/> <finalName/> <filters/> <pluginManagement> <plugins> <plugin> <groupId/> <artifactId/> <version/> <extensions/> <executions> <execution> <id/> <phase/> <goals/> <inherited/> <configuration/> execution> executions> <dependencies> <dependency> ...... dependency> dependencies> <inherited/> <configuration/> plugin> plugins> pluginManagement> <plugins> <plugin> <groupId/><artifactId/><version/><extensions/> <executions> <execution> <id/><phase/><goals/><inherited/><configuration/> execution> executions> <dependencies> <dependency> ...... dependency> dependencies> <goals/><inherited/><configuration/> plugin> plugins> build> <profiles> <profile> <id/> <activation> <activeByDefault/> <jdk/> <os> <name>Windows XPname> <family>Windowsfamily> <arch>x86arch> <version>5.1.2600version> os> <property> <name>mavenVersionname> <value>2.0.3value> property> <file> <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/exists> <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/missing> file> activation> <build> <defaultGoal/> <resources> <resource> <targetPath/><filtering/><directory/><includes/><excludes/> resource> resources> <testResources> <testResource> <targetPath/><filtering/><directory/><includes/><excludes/> testResource> testResources> <directory/><finalName/><filters/> <pluginManagement> <plugins> <plugin> <groupId/><artifactId/><version/><extensions/> <executions> <execution> <id/><phase/><goals/><inherited/><configuration/> execution> executions> <dependencies> <dependency> ...... dependency> dependencies> <goals/><inherited/><configuration/> plugin> plugins> pluginManagement> <plugins> <plugin> <groupId/><artifactId/><version/><extensions/> <executions> <execution> <id/><phase/><goals/><inherited/><configuration/> execution> executions> <dependencies> <dependency> ...... dependency> dependencies> <goals/><inherited/><configuration/> plugin> plugins> build> <modules/> <repositories> <repository> <releases> <enabled/><updatePolicy/><checksumPolicy/> releases> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> snapshots> <id/><name/><url/><layout/> repository> repositories> <pluginRepositories> <pluginRepository> <releases> <enabled/><updatePolicy/><checksumPolicy/> releases> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> snapshots> <id/><name/><url/><layout/> pluginRepository> pluginRepositories> <dependencies> <dependency> ...... dependency> dependencies> <reports/> <reporting> ...... reporting> <dependencyManagement> <dependencies> <dependency> ...... dependency> dependencies> dependencyManagement> <distributionManagement> ...... distributionManagement> <properties/> profile> profiles> <modules/> <repositories> <repository> <releases> <enabled/> <updatePolicy/> <checksumPolicy/> releases> <snapshots> <enabled/><updatePolicy/><checksumPolicy/> snapshots> <id>banseon-repository-proxyid> <name>banseon-repository-proxyname> <url>http://192.168.1.169:9999/repository/url> <layout>defaultlayout> repository> repositories> <pluginRepositories> <pluginRepository> ...... pluginRepository> pluginRepositories> <dependencies> <dependency> <groupId>org.apache.mavengroupId> <artifactId>maven-artifactartifactId> <version>3.8.1version> <type>jartype> <classifier>classifier> <scope>testscope> <systemPath>systemPath> <exclusions> <exclusion> <artifactId>spring-coreartifactId> <groupId>org.springframeworkgroupId> exclusion> exclusions> <optional>trueoptional> dependency> dependencies> <reports>reports> <reporting> <excludeDefaults/> <outputDirectory/> <plugins> <plugin> <groupId/> <artifactId/> <version/> <inherited/> <configuration/> <reportSets> <reportSet> <id/> <configuration/> <inherited/> <reports/> reportSet> reportSets> plugin> plugins> reporting> <dependencyManagement> <dependencies> <dependency> ...... dependency> dependencies> dependencyManagement> <distributionManagement> <repository> <uniqueVersion/> <id>banseon-maven2id> <name>banseon maven2name> <url>file://${basedir}/target/deployurl> <layout/> repository> <snapshotRepository> <uniqueVersion/> <id>banseon-maven2id> <name>Banseon-maven2 Snapshot Repositoryname> <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshoturl> <layout/> snapshotRepository> <site> <id>banseon-siteid> <name>business api websitename> <url> scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web url> site> <downloadUrl/> <relocation> <groupId/> <artifactId/> <version/> <message/> relocation> <status/> distributionManagement> <properties/> project>