本地jar包打包到本地仓库

本文介绍了一种简便方法,用于将本地的jar包批量部署到本地仓库,避免每次手动拷贝jar或添加依赖。通过封装maven命令,实现自动化操作,提升效率。适用于Maven和Gradle等版本管理工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本地jar包打包到本地仓库

Read me —— 指南

你有没有这样的烦恼,已在本地的jar包(可能找不到项目、源码了),想加入本地仓库,不必每次都去拷贝jar(或者添加包的依赖)。想通过版本管理工具Maven、Gradle等直接通过版本号关联依赖。
解决办法:
通过maven的命令 mvn install:install-file -Dfile……比较繁琐,我把这个繁琐的工作做了一次封装,批量操作,方便自己也分享给各位!

资源下载:本地jar包打包到本地仓库
  1. 运行环境,需要用tomcat8.0及以上版本(其他容器JBoss、WebLogic期待您去尝试);
  2. 需要安装maven,配置maven到环境变量;
  3. 将ROOT.war包放在tomcat 8.0 及以上tomcat的 tomcat-8.0.*\webapps\ 目录下(若存在ROOT文件夹,可先在其他地方[不能在webapps]进行备份后删去);
  4. 运行,双击 tomcat-8.0.24\bin\startup.bat 启动;
  5. 在浏览器中输入 http://localhost:8080/ 点击图片,跳转操作界面;
  6. 在操作界面中,根据提示和示例操作:① 选择我们本地jar的路径;② 左边录入 我们需要打包的dependencies,点击"开始打包"。
  7. 右边展示打包的结果及遇到的问题的提示,并根据提示进行调整。
  8. 忽略不影响使用的报错信息 Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream。
  9. 成功的操作记录已存日志 log\makeJar.YYYY-MM-dd.log,日志记录级别选为 ERROR,目的在于与其他级别的日志进行区别开来,只做关键记录,其实这些日志是正常操作产生的正常日志,而非error。
若 jar 包少 建议,不用本工具;而直接用命令:示例
  • mvn install:install-file -Dfile=alipay-sdk-java-3.0.0.jar -DgroupId=com.alipay -DartifactId=alipay-sdk -Dversion=3.0.0 -Dpackaging=jar

交流:

【操作方式相对简单,若有好的建议和意见,欢迎留言】

操作界面如下图:

在这里插入图片描述
复制打包的模板:
在这里插入图片描述

<think>嗯,用户遇到了Java打包后出现ClassNotFoundException的问题,需要分析原因和解决方案。首先,我得回忆一下常见的导致这个异常的情况。根据提供的引用内容,可能的原因括类路径问题、依赖缺失、打包配置错误等。 首先,用户提到的是本地jar打包后出现的异常。这可能意味着在打包过程中,某些依赖没有被正确含进去。比如,如果使用Maven或Gradle,可能需要检查依赖是否声明正确,或者是否使用了正确的插件来打包可执行jar。比如,Maven的maven-assembly-plugin或者maven-shade-plugin可以处理依赖的含,而普通的maven-jar-plugin可能不会把依赖打进jar里,导致运行时找不到类。 然后,用户可能没有正确配置Class-Path。在MANIFEST.MF文件中,如果指定了外部jar的路径,但实际部署时这些路径不存在或者jar没放对位置,也会引发问题。需要检查MANIFEST.MF中的Class-Path属性是否正确,所有需要的依赖是否都被列出,并且路径正确。 另外,本地jar如果是手动添加的,而没有通过构建工具管理,可能在打包时被遗漏。比如,在Maven项目中,如果直接通过system scope引入本地jar,但打包时没有正确含,就会导致问题。这时候可能需要检查构建配置,确保这些本地依赖被正确打包。 还有,类加载的问题。比如,动态加载类的时候,比如使用Class.forName(),如果类名拼写错误或者类不在类路径中,也会出现这个问题。需要检查代码中的类名是否正确,尤其是像数据库驱动类名,比如com.mysql.jdbc.Driver是否正确,或者是否更新到了新的版本,比如com.mysql.cj.jdbc.Driver。 此外,多模块项目中,子模块的依赖如果没有正确传递,也可能导致主模块打包时缺少必要的类。这时候需要检查模块间的依赖关系,确保所有需要的模块都被正确引入。 还有可能,用户在打包时没有含所有资源文件,比如配置文件或者Spring的组件扫描路径问题,导致某些类未被正确加载。不过这可能更多导致其他异常,但也不排除。 总结下来,可能的原因括:依赖未正确打包、MANIFEST.MF配置错误、类名错误、本地依赖未被正确含、构建工具配置问题等。解决方案需要逐一排查这些可能性,比如检查构建配置,确保依赖被正确打包;检查MANIFEST.MF的Class-Path;确认动态加载的类名正确;处理多模块项目的依赖传递;以及确保本地jar被正确引入和打包。</think>### Java Jar打包后出现ClassNotFoundException异常的原因及解决方案 #### 一、异常原因分析 1. **依赖未正确打包** - 当使用`maven-jar-plugin`等基础插件时,默认不会将依赖库打包到生成的Jar中。若未配置含依赖的插件(如`maven-assembly-plugin`或`maven-shade-plugin`),运行时将因缺少依赖类而报错[^2]。 - **示例**:若项目中依赖了MyBatis-Plus或MySQL驱动,但打包时未含这些库,则运行时会出现`ClassNotFoundException: com.mysql.jdbc.Driver`[^3]。 2. **MANIFEST.MF配置错误** - 在Jar的`MANIFEST.MF`文件中,`Class-Path`属性未正确声明外部依赖路径,或依赖路径与实际部署环境不匹配。 3. **动态加载类名错误** - 代码中通过`Class.forName("xxx")`动态加载类时,类名拼写错误或实际类路径与代码声明不一致。例如MySQL驱动类名应为`com.mysql.cj.jdbc.Driver`(新版)而非旧版`com.mysql.jdbc.Driver`。 4. **多模块项目依赖传递问题** - 在父子模块项目中,若子模块未正确声明依赖或父模块未聚合子模块,可能导致最终打包时缺失关键类。 --- #### 二、解决方案 ##### 1. **配置含依赖的打包插件(以Maven为例)** ```xml <!-- 使用maven-assembly-plugin打包含所有依赖的FatJar --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> ``` 执行命令: ```bash mvn clean package assembly:single ``` 生成的Jar文件名为`项目名-jar-with-dependencies.jar`,含所有依赖库。 ##### 2. **验证MANIFEST.MF配置** 解压Jar后检查`META-INF/MANIFEST.MF`,确保`Class-Path`含所有依赖的路径: ``` Class-Path: lib/mysql-connector-java-8.0.28.jar lib/mybatis-plus-3.5.2.jar ``` 若依赖路径错误,需调整构建插件配置或手动修正。 ##### 3. **检查动态加载的类名** 对于数据库驱动等需动态加载的类,确认代码中的类名与实际依赖版本一致: ```java // MySQL 8.0+ 驱动类名 Class.forName("com.mysql.cj.jdbc.Driver"); ``` ##### 4. **处理本地Jar依赖** 若项目依赖本地Jar文件(未通过Maven仓库管理),需在`pom.xml`中显式声明: ```xml <dependency> <groupId>com.custom</groupId> <artifactId>local-lib</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/local-lib.jar</systemPath> </dependency> ``` 同时确保打包插件(如`maven-assembly-plugin`)含`system`作用域的依赖。 --- #### 三、验证步骤 1. **解压Jar检查内容** 使用`jar tf your-app.jar`命令查看Jar内是否含预期的依赖类和资源文件。 2. **运行时指定类路径** 若依赖未打包Jar,可手动指定类路径: ```bash java -cp "your-app.jar:lib/*" com.example.Main ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值