<?xml version="1.0" encoding="UTF-8"?> 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.11 com.hw asset 1.0.0 asset asset war <java.version>8</java.version> <mybatis-plus.version>3.5.3.1</mybatis-plus.version> org.springframework.boot spring-boot-starter-web org.projectlombok lombok true com.baomidou dynamic-datasource-spring-boot-starter 3.6.1 com.oracle.database.jdbc ojdbc8 21.15.0.0 org.postgresql postgresql 42.6.0 com.huawei.gauss gaussdbv3 V300R001C00CP2075 system ${project.basedir}/lib/gaussdbv3.jdbc-V300R001C00CP2075.jar com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} dev dev true test test prod prod org.apache.maven.plugins maven-compiler-plugin org.springframework.boot spring-boot-maven-plugin true 我要怎么改呢?maven打包的时候也生成class文件加上lib包
时间: 2025-07-20 12:22:06 浏览: 2
<think>根据用户提供的pom.xml片段,用户想要在Maven打包时同时生成class文件和lib依赖目录。当前配置中已经使用了spring-boot-maven-plugin,但该插件默认生成的是包含依赖的Fat JAR。用户需要的是将class文件放在一个目录,同时将依赖库复制到另一个目录(如lib)的结构。
解决方案:
1. 使用maven-dependency-plugin复制依赖到指定目录(如target/lib)
2. 使用maven-jar-plugin指定class文件生成位置和Class-Path
3. 保留spring-boot-maven-plugin用于可执行JAR的生成(如果同时需要Fat JAR)
修改后的pom.xml步骤:
步骤一:添加maven-dependency-plugin,在package阶段复制依赖
步骤二:配置maven-jar-plugin,生成MANIFEST.MF时设置Class-Path(指向lib目录下的所有jar)
步骤三(可选):如果仍需生成可执行Fat JAR,保留spring-boot-maven-plugin;否则可移除
具体修改如下:</think>### 解决 Maven 打包问题:生成 class 文件 + lib 依赖目录
#### 修改方案(在您提供的 pom.xml 基础上调整)
```xml
<build>
<plugins>
<!-- 1. 添加依赖复制插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 指定依赖库输出目录 -->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 2. 添加资源复制插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- 3. 修改 spring-boot-maven-plugin 配置 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 保留原始打包方式 -->
<executable>true</executable>
<!-- 关键:禁止创建可执行JAR -->
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
```
#### 最终生成目录结构
```
target/
├── asset-1.0.0.war # 原始WAR包
├── classes/ # 编译后的class文件
├── lib/ # 所有依赖JAR
│ ├── spring-core-5.3.23.jar
│ ├── mybatis-plus-3.5.3.1.jar
│ └── ...其他依赖...
├── conf/ # 配置文件目录
│ ├── application.yml
│ └── ...其他配置...
└── maven-archiver/ # Maven生成的文件
```
#### 部署运行方式
1. **命令行启动**:
```bash
java -cp "target/classes:target/lib/*" com.hw.asset.Application
```
2. **Windows 批处理脚本** (`run.bat`):
```batch
@echo off
set CLASSPATH=target/classes;target/lib/*
java -cp %CLASSPATH% com.hw.asset.Application
```
3. **Linux 启动脚本** (`run.sh`):
```bash
#!/bin/bash
java -cp "target/classes:target/lib/*" com.hw.asset.Application
```
#### 验证打包结果
```bash
# 检查class文件
ls -R target/classes
# 检查依赖库
ls target/lib/*.jar | wc -l
# 检查配置文件
ls target/conf/
```
### 关键修改说明
1. **禁止 Spring Boot 打包插件**
通过 `<skip>true</skip>` 阻止生成可执行 JAR
2. **依赖库分离**
`maven-dependency-plugin` 将依赖复制到 `target/lib`
3. **配置文件独立**
`maven-resources-plugin` 分离配置文件到 `target/conf`
4. **保留原始 WAR 包**
不干扰 Maven 默认的 WAR 包生成流程
阅读全文
相关推荐












