- 浏览: 4249857 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
masuweng:
...
kaptcha验证码组件使用简介 -
caobingyi:
你好,问下html是怎么调用loginCheck方法的?
kaptcha验证码组件使用简介 -
hayoouch:
XieFuQ 写道既然都考虑到乐观锁了,是否可以直接换表存储引 ...
mysql乐观锁总结和实践 -
murdonson:
辛苦了
mysql悲观锁总结和实践 -
iamnotstar:
写得不错,感谢分享
memcached-session-manager配置
现在基本上都是采用maven来进行开发管理,我有一个需求是需要把通过maven管理的java工程打成可执行的jar包,这样也就是说必需把工程依赖的jar包也一起打包。而使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。我们可以通过配置插件来对工程进行打包,pom具体配置如下:
maven-assembly-plugin
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.chenzhou.examples.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin>
其中<mainClass></mainClass>的值表示此工程的入口类,也就是包含main方法的类,在我的例子中就是com.chenzhou.examples.Main。配置完pom后可以通过执行mvn assembly:assembly命令来启动插件进行构建。构建成功后会生成jar包,这样我们就可以在命令行中通过java -jar XXX.jar来运行jar件了。
不过使用此插件会有一些问题:我在工程中依赖了spring框架的jar包,我打包成功后使用命令来调用jar包时报错如下(内网环境):
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans-3.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
关于此问题报错的原因,我在网上找到一篇文章对此有比较详细的解释:http://blog.csdn.net/bluishglc/article/details/7596118 简单来说就是spring在启动时会加载xsd文件,它首先会到本地查找xsd文件(一般都会包含在spring的jar包中),如果找不到则会到xml头部定义的url指定路径下中去寻找xsd,如果找不到则会报错。
附:在spring jar包下的META-INF文件夹中都会包含一个spring.schemas文件,其中就包含了对xsd文件的路径定义,具体如下图所示:
图:spring-aop.jar包下META-INF文件夹下的内容
图:spring.schemas文件内容
由于我的工程是在内网,所以通过url路径去寻找肯定是找不到的,但是比较奇怪的是既然spring的jar包中都会包含,那为什么还是找不到呢?
原来这是assembly插件的一个bug,具体情况参见:http://jira.codehaus.org/browse/MASSEMBLY-360
该bug产生的原因如下:工程一般依赖了很多的jar包,而被依赖的jar又会依赖其他的jar包,这样,当工程中依赖到不同的版本的spring时,在使用assembly进行打包时,只能将某一个版本jar包下的spring.schemas文件放入最终打出的jar包里,这就有可能遗漏了一些版本的xsd的本地映射,所以会报错。
所以一般推荐使用另外的一个插件来进行打包,插件名称为:maven-shade-plugin,shade插件打包时在对spring.schemas文件处理上,它能够将所有jar里的spring.schemas文件进行合并,在最终生成的单一jar包里,spring.schemas包含了所有出现过的版本的集合,要使用shade插件,必须在pom进行如下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</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.ManifestResourceTransformer"> <mainClass>com.chenzhou.examples.Main</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
上面配置文件中有一段定义:
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer>
上面这段配置意思是把spring.handlers和spring.schemas文件以append方式加入到构建的jar包中,这样就不会存在出现xsd找不到的情况。
配置完pom后,调用mvn clean install命令进行构建,构建成功后打开工程target目录,发现生成了2个jar包,一个为:original-XXX-0.0.1-SNAPSHOT.jar,另一个为:XXX-0.0.1-SNAPSHOT.jar,其中original...jar里只包含了工程自己的class文件,而另外的一个jar包则包含了工程本身以及所有依赖的jar包的class文件。我们只需要使用第二个jar包就可以了。
参考资料:
http://hi.baidu.com/yuzhi2217/item/2c1714363f25c4f62684f442
http://blog.csdn.net/bluishglc/article/details/7596118
http://jira.codehaus.org/browse/MASSEMBLY-360
评论
基本上都说是缺少相应的jar包啊什么的.
原来你这个才是正解.
找了好久.终于看到了正解.
专门登录上来感谢一下.
amework.org/schema/context]的错误。
我查看我打包后的jar包内META-INF里的spring.schemas,spring.handlers,spring.factories里都有http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler的相关信息 包括
http\://www.springframework.org/schema/context/spring-context-3.2.xsd=org/springframework/context/config/spring-context-3.2.xsd等,可是执行就是出错,请给出点建议!谢谢~~~
不好意思,这几天没上iteye,刚刚才看到。你用的是maven-shade-plugin这个插件打包的么?
amework.org/schema/context]的错误。
我查看我打包后的jar包内META-INF里的spring.schemas,spring.handlers,spring.factories里都有http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler的相关信息 包括
http\://www.springframework.org/schema/context/spring-context-3.2.xsd=org/springframework/context/config/spring-context-3.2.xsd等,可是执行就是出错,请给出点建议!谢谢~~~
发表评论
-
kaptcha验证码组件使用简介
2013-12-10 11:53 46281Kaptcha是一个基于SimpleC ... -
Unable to locate Spring NamespaceHandler for XML schema namespace
2013-11-05 16:25 59543java服务中整合了spring,在Eclipse里本地启 ... -
由缓存导致的一个java序列化问题
2013-09-24 22:38 11336背景描述: 项目是普 ... -
Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
2013-03-26 22:32 136088Eclipse中tomcat部署工程启动后报错: 严重: ... -
Eclipse报错:Setting property 'source' to 'org.eclipse.jst.jee.server:test1' did no
2013-03-26 20:48 78210最近把Eclipse的maven插件从m2eclipse更新 ... -
Eclipse报错:Referenced classpath provider does not exist: org.maven.ide.eclipse……
2013-03-18 15:51 15826前段时间更新了Eclipse的maven插件,原来安装的是 ... -
Eclipse中Maven工程缺少Maven Dependencies
2013-02-21 19:43 203275Eclipse在引入Maven工程后,找不到Ma ... -
Spring拦截器中通过request获取到该请求对应Controller中的method对象
2012-10-21 16:51 160530背景:项目使用Spring 3.1.0.RELEASE,从da ... -
JVM学习笔记(九):基于栈的解释器执行过程
2012-07-26 00:37 5126本文根据《深入理解java ... -
JVM学习笔记(八):类加载器以及双亲委派模型介绍
2012-07-19 21:02 7780本章内容根据《深入理解Java虚拟机》第7章部分内容整理 ... -
JVM学习笔记(七):类加载的过程
2012-07-19 18:59 3636本文根据《深入理解java虚拟机》第7章部分内容整理 ... -
JVM学习笔记(六):类加载的时机
2012-07-18 14:58 8609本文根据《深入理解java ... -
JVM学习笔记(五):根据字节码指令介绍方法执行流程
2012-07-17 19:48 2820在上一篇博客中介绍了《Class文件结构》,其中就提 ... -
JVM学习笔记(四):Class文件结构
2012-07-17 18:29 5452本文根据《深入理解Java ... -
JVM学习笔记(三):JVM的垃圾回收
2012-07-12 21:06 4137注:本文根据《深入理解Java虚拟机》第3章部分内容整理而成 ... -
JVM学习笔记(二):JVM中对象访问的两种方式
2012-07-11 18:32 4353由于Reference类型在Java虚拟机规范里面只规定 ... -
JVM学习笔记(一):运行时数据区
2012-07-11 17:31 10583运行时数据区 java虚拟机定义了若干种程序运行时使 ... -
MyBatis批量插入数据
2012-07-10 08:50 433796在程序中封装了一个List集合对象,然后需要把该集合中的实体插 ... -
Maven依赖管理
2012-07-08 23:35 4847Maven提供dependencyManagemen ... -
Maven聚合与继承
2012-07-08 23:22 36683Maven聚合与继承 一、聚合 为了能够使用 ...
相关推荐
主要介绍了使用maven插件对java工程进行打包过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
IDEA中使用maven打jar包,然后使用工具混淆代码,亲测有效
IDEA中使用maven打jar包,然后使用工具混淆代码,亲测有效
maven_java项目
使用maven将Java程序打包成exe文件并制作成Windows系统服务(六)之使用allatori对Java代码混淆
JavaPackager JavaPackager是Maven和Gradle的混合插件,它提供了一种简便的方法来将Java应用程序打包在本机Windows,Mac OS X...如何使用这个插件使用Maven打包您的应用将以下plugin标签添加到您的pom.xml : < plugin>
将java生成可执行exe文件,可以直接在win下双击运行
使用maven将Java程序打包成exe文件并制作成Windows系统服务之springboot打包(一)项目代码
这是一个springboot+maven写的demo,主要演示springboot项目通过maven插件,将依赖与配置文件打包到jar包外部,实现灵活的项目管理.仅供参考学习
使用maven将Java程序打包成exe文件并制作成Windows系统服务(四)使用Inno Setup制作一键安装包installer
maven下载
maven ...强调 Maven 的生命周期和插件机制,以及如何使用插件扩展 Maven 的功能。 第三部分:Maven 的优势和应用 探讨 Maven 在项目开发中的优势和受欢迎程度。解释 Maven 的模块化和标准化特点,
第10章:使用Maven进行测试/10.8 打包测试代码/10.8.2 插件配置 第10章:使用Maven进行测试/10.8 打包测试代码/10.8.3 执行打包操作 第10章:使用Maven进行测试/10.8 打包测试代码/10.8.4 引用测试jar包 第11章:用...
* 安装Eclipse对maven的插件 * 先用命令建一个Web项目:mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp * 然后建一个Ecllipse项目:my...
在windows下使用maven打包,生成jar包。并使用java -jar *.jar运行。 讲述maven各种打包插件的问题。及解决方法。
java 写的可执行程序怎么使用 maven 打包? 执行程序中有巨多第三方依赖包,要一起打进 jar 包,怎么办? maven-assembly-plugin 插件打第三方依赖包进 jar,spring 有 org.springframework.beans.factory.parsing....
<artifactId>nutzboot-maven-plugin ${nutzboot.version} 打包jar文件 mvn clean package nutzboot:shade 打包后jar文件可直接运行 java -jar XXX.jar 若需要设置jvm内存大小等参数: java -Xmx512m -Xms512m...
maven通过坐标对项目工程所依赖的jar包统一规范管理。 3、maven定义一套项目生命周期 清理、初始化、编译、测试、报告 、打包、部署、站点生成 4、一组标准集合 强调:maven工程有自己标准的工程目录结构、定义...
Deb Maven插件 Maven插件,用于创建.deb程序包,创建控制文件,版权文件以及可复制地复制运行时依赖项。 插件与平台无关,不需要其他外部工具。 需要Java 8和Maven 3.3 可从中央Maven存储库获得插件。 要使用它,...
Maven可以简化项目的构建和依赖管理,并提供...Maven自带了许多常用的插件,如编译、测试、打包插件等。 5、文档生成:Maven可以使用插件来生成项目的文档,如JavaDoc文档、站点文档等。 6、多模块支持:Maven支持多