maven打包怎么把system的依赖也拷贝
时间: 2024-09-27 15:08:48 浏览: 41
当你使用Maven进行项目打包时,通常默认情况下,它会将项目的依赖包(包括`pom.xml`文件中的`<dependencies>`部分)一起包含到最终的JAR或WAR文件中。如果你希望将系统的(比如`java-sdk`, `junit`等)而不是项目的依赖也一并打包,你需要做以下操作:
1. **手动配置**:
- 使用maven-shade-plugin插件,在`pom.xml`中添加以下配置,这将会"shade"或合并所有的依赖(包括系统库)到一个新的独立的Jar中:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/*</resource>
</transformer>
<!-- 添加更多需要复制的资源 -->
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
确保添加了正确的`<resource>`标签来指定哪些资源需要被复制。
2. **排除不需要的**:
如果你想保留特定系统库,可以设置`excludes`属性来排除那些不想打包的依赖:
```xml
<dependency>
<groupId>org.example</groupId>
<artifactId>system-dep</artifactId>
<scope>system</scope>
<systemPath>${project.basedir}/lib/system-lib.jar</systemPath>
<optional>true</optional>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>other-system-dep</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
```
3. **注意**: 对于系统路径(system path)依赖,它们不会通过Maven仓库管理,所以如果部署到其他环境中,可能需要保证系统库文件的存在。
阅读全文