Maven项目打包时添加本地jar包

文章介绍了两种在Maven项目中引入非Maven仓库的第三方jar包方法。方案一是通过`mvninstall:install-file`命令将jar包安装到本地仓库,然后在pom.xml中添加依赖。方案二是直接在pom.xml中以`system`作用域引入jar包,并配置maven-war-plugin或spring-boot-maven-plugin使其在打包时包含。这两种方法都能确保jar包在打包过程中被包含进war或jar文件。

Maven项目打包时添加本地jar包

maven打包时添加外部jar同maven中的jar包一起添加到编译后的文件当中

在开发项目时,有些 jar 包是非 maven 仓库提供的第三方 jar 包,比如七牛的 sdk,阿里的 sdk 等等。在项目开发时,有以下两个方案来引入、打包。

以alipay-sdk-java-3.0.0.jar这个 jar 包为例

方案一 安装本地jar包到本地仓库

  1. 本地安装
    在alipay-sdk-java-3.0.0.jar文件目录下执行命令,安装此 jar 包到本地 maven 仓库中

mvn install:install-file -Dfile=alipay-sdk-java-3.0.0.jar
-DgroupId=com.aliyun -DartifactId=alipay-sdk-java -Dversion=3.0.0 -Dpackaging=jar

2.普通方式导入jar包
在本地安装第三方 jar 后在项目 pom 文件中就可以像添加 maven 的 jar 包依赖一样

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>alipay-sdk-java</artifactId>
   <version>3.0.0</version>
</dependency>

这个方案有个缺点,就是其他开发人员也必须在自己的电脑上执行步骤1的安装命令,安装 jar 包到自己本地仓库。

方案二 在项目 pom 中配置
1.在项目根目录创建libs文件夹将使用的jar包放入其中
2.jar包以scope为system的方式导入pom文件

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>alipay-sdk-java-3.0.0</artifactId>
   <version>3.0.0</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/libs/alipay-sdk-java-3.0.0.jar</systemPath>
</dependency>

3.打包
3.1 打成 war包 添加maven-war-plugin插件配置

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <configuration>
      <webResources>
         <resource>
            <directory>${project.basedir}/libs</directory>
            <targetPath>WEB-INF/lib</targetPath>
            <includes>
               <include>**/*.jar</include>
            </includes>
         </resource>
      </webResources>
   </configuration>
</plugin>

3.2 打成 jar包

<plugin>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <executions>
         <execution>
             <goals>
                 <goal>repackage</goal>
             </goals>
         </execution>
     </executions>
     <configuration>
         <includeSystemScope>true</includeSystemScope>
     </configuration>
 </plugin>

以上两个方案选择一个,就可以愉快地开发项目了。

后面使用 maven 命令打包时也可以将alipay-sdk-java-3.0.0.jar打包到最终的包中啦。

mvn clean package -Dmaven.test.skip=true

————————————————
版权声明:本文为优快云博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/m0_67391907/article/details/123986803

<think>首先,用户的问题是:“我想查找Maven打包无法找到本地jar的解决方案 请问Maven打包无法找到本地jar的解决办法”。这是在寻求帮助解决Maven构建找不到本地JAR的问题。 我从系统级指令中回顾关键点: - 所有行内数学表达式使用$...$格式(但这里可能不涉及数学)。 - 独立公式使用$$...$$并单独成段(同样,可能不适用)。 - LaTeX语法正确(在代码块中需要正确)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户提供了几个引用: - [^1]:描述需要手动添加本地JAR的情况。 - [^2]:介绍如何在Maven项目中引入本地JAR。 - [^3]:提到打包本地JAR的问题。 - [^4]:讨论了导入本地JAR的方式。 - [^5]:提供了导入本地JAR的插件声明方式。 我需要整合这些引用来回答用户的问题。用户的问题是具体关于打包找不到本地JAR,所以我应该聚焦在解决方案上。 关键引用: - [^4]提到了普通方式导入JAR:在pom.xml中添加dependency,指定scope为system和systemPath。 - [^5]给出了一个具体例子:<scope>system</scope> and <systemPath>指向本地路径。 - [^3]提到使用assembly-plugin打包遇到问题。 常见原因和解决方案: 1. **添加本地JAR依赖**:使用<dependency>标签指定scope和systemPath。 2. **打包插件配置**:确保打包插件如maven-assembly-plugin或maven-shade-plugin能本地JAR。 3. **路径问题**:验证systemPath是否正确,使用相对路径(如${project.basedir}/libs/xxx.jar)。 4. **范围问题**:使用<scope>system</scope>。 5. **插件配置**:在打包插件中添加includeSystemScope或其他配置。 从引用中: - [^5]:使用<dependency> with <scope>system</scope> and <systemPath>。 - [^4]:类似方式。 - [^3]:提到assembly-plugin可能需要额外配置。 完整解决方案步骤: 1. 在pom.xml中添加依赖: ```xml <dependency> <groupId>com.example</groupId> <artifactId>example-artifact</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/libs/your-jar-file.jar</systemPath> </dependency> ``` 2. 确保JAR文件位于指定的路径。 3. 如果使用打包插件如maven-assembly-plugin,配置descriptorRef或assembly描述符来含系统范围的依赖。 - 例如,在pom.xml中配置插件: ```xml <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>your.main.Class</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> ``` - 或者添加includeSystemScope配置:<includeSystemScope>true</includeSystemScope>在某些插件中。 4. 运行Maven命令:mvn clean install。 其他注意事项: - 对于本地JAR,groupId和artifactId可以是任意的,但要一致。 - 使用相对路径以避免环境依赖。 - 如果在IDE中工作,确保IDE配置正确。 现在,结构回答: - 使用中文回复。 - 结构清晰:先解释问题,然后逐步给出解决方案。 - 引用参考:在相关部分添加引用标识。 - 结束生成相关问题。 回答结构: 1. 介绍问题:Maven打包找不到本地JAR的原因。 2. 解决方案步骤。 3. 代码示例。 4. 注意事项。 5. 生成相关问题。 生成相关问题: - 基于主题,如: 1. 如何避免使用本地JAR的最佳实践? 2. Maven依赖冲突解决的其他方法? 3. 如何在Maven项目中管理自定义JAR? 4. 使用assembly-plugin打包的常见问题? 5. Maven中system scope的优缺点? 确保回答真实可靠:基于提供的引用和一般Maven知识。 最终输出格式: - 文本回答。 - 代码块使用Markdown格式。 - 引用标识如[^1]。 - 结尾有相关问题部分。 </think>### Maven打包找不到本地JAR的解决方案 当Maven构建项目无法找到本地JAR,通常是由于依赖未正确配置或打包插件未含系统范围的依赖所致。这个问题常见于需要引入本地修改的JAR、非Maven仓库的自定义依赖或解决依赖冲突的场景[^1][^5]。以下是系统化的解决步骤,基于Maven的最佳实践和引用内容。注意:所有操作均在项目根目录的`pom.xml`文件中完成。 #### **步骤1: 添加本地JAR依赖** 在`pom.xml`中,使用`<scope>system</scope>`和`<systemPath>`明确指定本地JAR路径: ```xml <dependency> <groupId>com.example</groupId> <!-- 替换为自定义groupId --> <artifactId>example-artifact</artifactId> <!-- 替换为自定义artifactId --> <version>1.0.0</version> <!-- 替换为实际版本号 --> <scope>system</scope> <systemPath>${project.basedir}/libs/your-jar-file.jar</systemPath> <!-- 替换为JAR文件的实际相对路径 --> </dependency> ``` - **关键点**: - `<scope>system</scope>`:声明依赖为本地系统路径而非Maven仓库[^5][^4]。 - `<systemPath>`:使用`${project.basedir}`表示项目根目录的相对路径(例如`libs/xxx.jar`),避免绝对路径带来的环境依赖问题[^2][^5]。 - 确保JAR文件已放置在指定路径下(如`/libs`目录)。 - **为什么有效**:这强制Maven在编译和打包阶段识别本地JAR引用[^4][^5]。 #### **步骤2: 配置打包插件以本地JAR** 如果使用`maven-assembly-plugin`或类似工具打包(如生成可执行JAR或ZIP),需额外配置插件: ```xml <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> <!-- 确保含所有依赖 --> </descriptorRefs> <includeSystemScope>true</includeSystemScope> <!-- 关键: 含system范围的依赖 --> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` - **关键点**: - `<includeSystemScope>true</includeSystemScope>`:确保打包含`system`范围的本地JAR[^3]。 - 如果使用其他插件(如`maven-shade-plugin`),同样添加`<includeSystemScope>true</includeSystemScope>`配置。 - **为什么有效**:默认打包插件可能忽略`system`依赖,此配置强制本地JAR文件以避免“程序不存在”错误[^3][^5]。 #### **步骤3: 验证和构建项目** 1. **验证依赖路径**: - 执行 `mvn dependency:resolve` 检查依赖是否被正确识别。 - 错误示例:若提示 `Missing artifact xxx`,请核对`<systemPath>`路径。 2. **清理并重新构建**: ```bash mvn clean package # 重新打包项目 ``` - 打包后检查生成的JAR/ZIP文件(如 `target/*-jar-with-dependencies.jar`),验证本地JAR是否被含。 #### **注意事项** - **本地JAR管理**:优先将自定义JAR部署到私有Maven仓库(如Nexus),避免使用本地路径以减少环境问题[^2][^4]。 - **依赖冲突**:如果多个本地JAR有版本冲突,在`pom.xml`中使用`<exclusions>`或依赖管理解决[^1]。 - **IDE支持**:在IntelliJ或Eclipse中,导入本地JAR后需刷新Maven项目(右键项目 > Maven > Update Project)[^5]。 - **替代方案**:对于临测试,可使用 `mvn install:install-file` 将本地JAR安装到本地仓库(命令示例:`mvn install:install-file -Dfile=libs/your-jar-file.jar -DgroupId=com.example -DartifactId=example-artifact -Dversion=1.0.0 -Dpackaging=jar`),再在`pom.xml`中以常规依赖引用[^4]。 通过以上步骤,Maven打包能正确处理本地JAR依赖。如果问题持续,检查控制台错误日志以定位路径错误或插件配置遗漏[^3][^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值