开发者

Maven打包没有指定主类问题(xxx.jar中没有主清单属性)

开发者 https://www.devze.com 2023-04-11 10:57 出处:网络 作者: 啊Abu
目录Maven打包没有指定主类软件环境打xxx.jar包(不包含依赖的jar包)打xxx-jar-with-dependencies.jar包写在后面​处理maven打包中没有主类启动的情况总结Maven打包没有指定主类
目录
  • Maven打包没有指定主类
    • 软件环境
    • 打xxx.jar包(不包含依赖的jar包)
    • 打xxx-jar-with-dependencies.jar包
    • 写在后面​
  • 处理maven打包中没有主类启动的情况
    • 总结

      Maven打包没有指定主类

      在使用IDEA开发项目的时候经常会遇到使用Maven打包项目(打成jar包或者zip包),但是之前不太清楚打包插件的使用,有时候会遇到在启动jar包的时候没有指定主类的错误(dd-1.0-SNAPSHOT.jar中没有主清单属性)。今天学习一下插件使用,写一个针对该问题的教程。

      软件环境

      • IDEA:2017.1.5
      • Maven:3.3.9

      打xxx.jar包(不包含依赖的jar包)

      Maven可以不添加插件默认打jar包,但是如果想要修改默认的参数需要重新引入插件添加需要修改信息。

      ​ 1. 修改pom.XML

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>demo.LoadDataMR</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>

      2.使用Maven工具打包

      找到IDEA右边的【Maven Projects】->【项目名称】->【Lifecycle】

      • a. 先双击【clean】查看控制台(Run)是否出现BUILD SUCCESS
      • b. 然后双击【package】查看控制台(Run)是否出现BUILD SUCCESS
      • c. 在IDEA左边查看【Project】界面会出现【targetandroid】文件夹,打开文件夹会出现xxx.jar包说明已经构建完成。
      • ​d. 打开xxx.jar文件,在【META-INF/MANIFEST.MF】文件里面存在Main-Class: demo.LoadDataMR

      打xxx-jar-with-dependencies.jar包

      1. 修改pom.xml文件

      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>demo.LoadDataMR</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </depythonscriptorRefs>
        </configuration>
        <!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
        <executions>
          <execution>
            <id>make-assemble</id>
            <android;phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      2.使用Maven工具打包

      找到IDEA右边的【Maven Projects】->【项目名称】->【Lifecycle】

      • a. 先双击【clean】查看控制台(Run)是否出现BUILD SUCCESS
      • b. 然后双击【package】查看控制台(Run)是否出现BUILD SUCCESS
      • c. 在IDEA左边查看【Project】界面会出现【target】文件夹,打开文件夹会出现xxx.jar包说明已经构建完成。
      • d. 打开xxx-jar-with-dependencies.jar文件,在【META-INF/MANIFEST.MF】文件里面存在Main-Class: demo.LoadDataMR

      写在后面​

      Maven插件配置的信息只能针对其生成的文件,在maven-jar-plugin插件设置的信息只会出现在xxx.jar包中,在maven-assembly-plugin插件设置的信息只会出现在xxx-jar-with-dependencies.jar包中

      处理maven打包中没有主类启动的情况

      第一步:在pom文件中添加

      <!--解决maven打包问题-->
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>
                     com.xxx.XXApplication
                    </Main-Class>
                  </manifestEntries>
                </transformer>
                <transformer implementation="org.apache开发者_C学习.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformerpythons>
            </configuration>
          </execution>
        </executions>
      </plugin>

      第二步 mvn:cphplean

      第三步 mvn:package

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号