Java封装jar包对外提供可执行文件
编写Main方法,封装jar包
1、编写Main方法
import java.util.Date; /**
* 描述 :
*
* @Author : zhanghao
* @Time : 2019/10/28 14:08
*/
public class ***MainTest {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");
***API ***ServiceAPI= (***ServiceAPI) applicationContext.getBean("****Impl");
System.out.println("定时任务执行结果_"+ DateUtils.format(new Date())+":"+***ServiceAPI.***Process());
}
}
具体项目结构如下:

2、通过idea可以快速进行Main方法的jar包封装,具体步骤可以参考
https://blog.csdn.net/yuang12345/article/details/90293013
https://blog.csdn.net/daiyunxing0545/article/details/85254303
https://blog.csdn.net/banjing_1993/article/details/83073210
3、编译完成后 执行 java -jar ****MainTest 即可运行相关方法
估计大概率,会执行报错(偷笑)
错误一:不识别java命令
检查是否正确配置了java的环境变量
错误二:***Test.jar中没有主清单属性
使用解压工具打开jar包,找到META-INF-->MANIFEST.MF->使用记事本打开,在第二行添加
Main-Class: main方法的路径
保存后重新执行命令即可
![]()
错误三:执行过程中报 Invalid signature file digest for Manifest main attributes
将打好包的jar文件中的 META-INF/*.RSA META-INF/*.DSA META-INF/*.SF 文件删掉
参考链接:https://blog.csdn.net/c1481118216/article/details/79667025
https://blog.csdn.net/dai451954706/article/details/50086295
错误四:执行过程中报 org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
或者 其它的schema错误
由于没有配置META-INF/spring.handlers和META-INF/spring.schemas,所以如果工程中依赖了Spring的多个依赖,在打包时后面的会把前面的覆盖,使得这两个文件中永远只保存最后一个spring依赖的schema和handler。
方法一:使用maven的打包插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version> 1.7.</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/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.chenzhou.test.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
方法二:
第二种方法其实很简单,找到这三个文件,用我提供的这三个完整的文件覆盖即可。
通常,这三个文件都在jar包下面的META-INF路径下
参考链接:https://www.iteye.com/blog/chenzhou123520-1971322
https://www.iteye.com/blog/chenzhou123520-1706242
https://www.cnblogs.com/starwater/p/6679777.html
错误五:找不到 ***.propertie或者spring-config.xml
maven打包插件配置错误,resources下面的配置没有打进来


Java封装jar包对外提供可执行文件的更多相关文章
- Java常用jar包用途
Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM ...
- (转)java 从jar包中读取资源文件
(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...
- 杂项-Java:jar 包与 war 包介绍与区别
ylbtech-杂项-Java:jar 包与 war 包介绍与区别 1.返回顶部 1. 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介 ...
- 将java打jar包成linux后台服务service
将java打jar包成linux后台服务service 第一步:将java程序打成jar包 build.gradle配置文件中加spring-boot-gradle-plugin插件,具体配置如下(配 ...
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- PHP通过php-java-bridge调用JAVA的jar包里class类
正 文: 有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- Python3.5调用Java的jar包
声明:这个是在一个博客上看到的,过了俩星期了突然找不到原博客了,如果原来的博主看到,请联系我删除~ 主要是怕自己忘记,所以在此记录: 环境 Python3.5+JDK1.8 安装命令:python3 ...
- Java axis2.jar包详解及缺少jar包错误分析
Java axis2.jar包详解及缺少jar包错误分析 一.最小开发jar集 axis2 开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar ax ...
随机推荐
- Eclipse中run as run on server和run as java application
一.run java application (作为Java应用程序运行)是运行 java main方法 run on server是启动一个web 应用服务器 二.两者的区别: Eclipse中 ...
- 深入理解JVM-hotspot虚拟机对象探秘
1.背景与大纲 在我们了解了java虚拟机的运行时数据区后,我们大概知道了虚拟机内存的概况,但是我们还是不清楚具体怎么存放的访问的: 接下来,我们将深入探讨HotSport虚拟机在java堆中对象的分 ...
- PHP实现微信对账单处理
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款 ...
- Java集合框架总结2_Map
1. Map接口概述 Map与Collection并列存在.用于保存具有映射关系的数据:key-value: Map中的key和value都可以是任何应用类型的数据: Map中的key用Set来存放, ...
- X.509
参考:https://baike.baidu.com/item/X.509/2817050?fr=aladdin 标题:X.509 百度百科 在密码术中,X.509是定义公用密钥证书格式的标准. X ...
- 关于缩短cin时间的方法
std::ios::sync_with_stdio(false);
- mysql终止当前正在执行的sql语句
show processlist;找出你要停止的语句然后找出你要终止的语句的idkill 248
- mybatis多数据库切换,(动态数据源)。
项目中将一个库的某些标的某些数据保存到另一个库. 使用spring的aop编程动态切换数据源,代码如下,以备下次用到! 1.先将两个数据库连接,创建两个数据源,交于spring管理! <bean ...
- EF 多数据库切换配置(MSSQL/MySql)
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...
- AtCoder Beginner Contest 132 解题报告
前四题都好水.后面两道题好难. C Divide the Problems #include <cstdio> #include <algorithm> using names ...