博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过idea 打包 spring maven项目打包为可执行jar包
阅读量:5893 次
发布时间:2019-06-19

本文共 5520 字,大约阅读时间需要 18 分钟。

用assembly打包一直报错:

shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-jar-with-dependencies.jar17-04-30 15:52:43,337 INFO  org.springframework.context.support.ClassPathXmlApplicationContext(AbstractApplicationContext.java:495) ## Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@22927a81: startup date [Sun Apr 30 15:52:43 CST 2017]; root of context hierarchy17-04-30 15:52:43,489 INFO  org.springframework.beans.factory.xml.XmlBeanDefinitionReader(XmlBeanDefinitionReader.java:315) ## Loading XML bean definitions from class path resource [spring/applicationContext-myBatis.xml]17-04-30 15:52:47,269 INFO  org.springframework.beans.factory.xml.XmlBeanDefinitionReader(XmlBeanDefinitionReader.java:315) ## Loading XML bean definitions from class path resource [spring/applicationContext.xml]Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]Offending resource: class path resource [spring/applicationContext.xml]    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:316)    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1416)    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)    at org.springframework.context.support.ClassPathXmlApplicationContext.
(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.
(ClassPathXmlApplicationContext.java:83) at com.jobscrawler.crawlers.ShhCrawler.main(ShhCrawler.java:48)

网上看了一篇文章介绍说这是assembly打包spring项目的一个bug。

据说原因是spring的多个jar包中都含有spring.handlers和spring.schemas文件,而assembly只会把第一次遇到的文件打入jar包,后面遇到的都会skip掉。

总之就是打包的时候会漏掉你的配置文件。所以我们只能放弃这中打包方式,还有用shade打包的,经过我的实际使用也是不适用于我的情况。

最终我通过idea自带的打包方式成功讲spring+maven的项目打包成可执行的jar包,并运行成功。

我参考的就是这篇文章(http://www.jb51.net/article/101964.htm)写的非常详细。

用IDEA自带的打包方式:

打开IDEA的file -> Project Structure,进入项目配置页面。如下图:

 

点击Artifacts,进入Artifacts配置页面,点击 + ,选择如下图的选项。

 

进入Create JAR from Modules页面,按照如下图配置。

 

  • 第一步选择Main函数执行的类。
  • 第二步选择如图的选项,目的是对第三方Jar包打包时做额外的配置,如果不做额外的配置可不选这个选项(但不保证打包成功)
  • 第三步需要在src/main目录下,新建一个resources目录,将MANIFEST.MF文件保存在这里面,因为如果用默认缺省值的话,在IDEA12版本下会有bug。

点击OK之后,出现如下图界面,右键点击<output root>,点击Create Directory,创建一个libs,将所有的第三方JAR放进libs目录下。

 我是一个个的把下面的jar包拖进libs的,貌似都不可以批量拖进去。

成功之后,如下图所示:

 

放入之后,点击我们要打成的jar的名字,这里面是kafka-cps.jar,选择classpath进行配置。

 点击右下角的...

编辑的结果如下:

 

 在每一行的jar包前面添加我们刚刚新建的文件夹路径,其实就是为了一个简洁清晰。

这里将所有的jar都写在libs/里面。点击OK,回到配置页面。

同时还注意在配置页面,勾选build on make

 

最后点击配置页面的OK,完成配置。回到IDEA,点击Build->Build Artifacts,选择build

 

就会生成我们需要的jar包。其位置在项目目录的out目录下/out/artifacts/kafka_cps_jar

下面放一个正确配置的清单文件内容

 

可能因为idea版本不一样吧,我的jar包生成位置不一样,我的位置在:

 

执行jar包:

我们在命令行进入到JobsCrawler_jar文件夹下,执行:java -jar JobsCrawler.jar

就看到执行成功的效果了。

 

转载于:https://www.cnblogs.com/guazi/p/6789679.html

你可能感兴趣的文章
设计模式4-工厂方法模式
查看>>
python爬虫-execjs使用
查看>>
Vue1.0基础学习笔记整理
查看>>
设置Nodejs NPM全局路径
查看>>
内存泄漏
查看>>
Ubuntu Server中的root用户
查看>>
JVM的总结
查看>>
Linux内核堆栈使用方法 进程0和进程1【转】
查看>>
有了GPRS为什么还要LoRa和NB-IoT?【转】
查看>>
Linux USB驱动框架分析【转】
查看>>
ES6中export , export default , import模块系统总结
查看>>
禁止微信下拉到顶部时露底--代码记录
查看>>
html包含的属性设置
查看>>
【Alpha】项目展示
查看>>
树上倍增求LCA
查看>>
C#扩展一般用于linq
查看>>
UVA 11478(差分约束 + 二分)
查看>>
mysql.user表中Host为%的含义
查看>>
python 变量作用域
查看>>
算法复杂性为O (n2)
查看>>