打包可运行jar文件,没有主清单属性,部分依赖没有打包。

项目场景:

对完成的java项目使用maven进行打包,并打包成可运行jar文件。

问题描述:

mvn clean compile  
mvn clean package
java -jar xxx.jar

运行jar包时出现没有

  • -SNAPSHOT.jar中没有主清单属性
  • resource文件夹的包没有导入

解决方法需要对项目中的配置文件进行改动。


解决方案:

主清单属性是指可运行jar包中的main函数,如果要运行jar包需要指明一个运行的入口,需要改动pom.xml。
添加:

<plugins>
	   <plugin>
	        <artifactId>maven-assembly-plugin</artifactId>
	        <version>2.4</version>
	        <configuration>
	            <descriptorRefs>
	                <descriptorRef>jar-with-dependencies</descriptorRef>
	            </descriptorRefs>
	            <archive>
	                <manifest>
                       <mainClass>com.noteligible.pojo.main</mainClass>
                  </manifest>
                 </archive>
             </configuration>
             <executions>
                 <execution>
                     <id>make-assembly</id>
                     <phase>package</phase>
                     <goals>
                         <goal>single</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>

其中mainClass指的是main函数的函数位置。


maven似乎默认不打包resource文件夹中的jar包,需要再pom.xml中添加:

<resource>
   <directory>src/main/resources</directory>
    <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
    </includes>
</resource>

directory>指明了需要打包的目录路径。

### 解决 Gradle 打包 JAR 文件缺少 `Main-Class` 清单属性 为了确保打包后的 JAR 文件能够正常运行,必须正确配置 `build.gradle` 文件中的 `manifest` 属性来指定主类。以下是具体的解决方案: #### 配置 `build.gradle` 在项目的 `build.gradle` 文件中添加或修改 `jar` 块以包含 `Main-Class` 属性。这可以通过以下方式实现: ```groovy jar { manifest { attributes 'Main-Class': 'com.wafa.mallServer.LanyiMallServerApplication' } } ``` 这段代码指定了应用程序的入口点为 `LanyiMallServerApplication` 类[^1]。 如果项目结构较为复杂或者有额外依赖,则可能需要进一步调整配置: ```groovy jar { manifest { attributes "Main-Class": "com.example.sample.Application" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } ``` 此配置不仅设置了 `Main-Class`,还包含了编译时所需的库文件,从而创建一个可独立运行的 fat-jar (uber-jar)[^2]。 #### 构建命令 完成上述配置更改之后,可以在控制台通过下面的命令来进行构建操作并跳过测试阶段: ```bash gradle build -x test ``` 最终生成的 JAR 文件将会位于 `build/libs/` 目录下,并且已经带有正确的清单条目。 #### 检查 JAR 文件 为了验证是否成功添加了 `Main-Class` 属性,可以解压 JAR 文件查看其 MANIFEST.MF 文件的内容,确认是否存在如下行: ``` Manifest-Version: 1.0 Created-By: Apache Maven Archiver Build-Jdk-Spec: 1.8 Main-Class: com.wafa.mallServer.LanyiMallServerApplication ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值