- 浏览: 98996 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (112)
- java (112)
- [书目20081126]转型:用对策略,做对事 (1)
- [转]c# winform 绘制圆角窗体 (1)
- Idiot's Note Four: 循环中continue和“if ”的细节注意 (1)
- ActiveMQ中消息游标 (1)
- http://sourceforge.net 打不开的解决办法 (1)
- 常用命令收集(系统设置) (1)
- jsessionid 问题分析 (1)
- JSP 页面不能解析EL表达式。 (1)
- SQLServer的备份语句 (1)
- Struts2 jQuery Plugin Showcase 学习笔记 (1)
- Razor view engine 基础语法 (1)
- 44个 灵感来自于“大自然”的网站设计(上) (1)
- 菜单多国语言化遇到的问题 (1)
- Mysql查看当前连接数 (1)
- Libgdx之旅-----LuaTutorial (1)
- 一些经典的BLOG (1)
- How do I prevent builds between multiple changes to the workspace? (1)
- RAP常用技巧 (1)
- Android常用类库包介绍 (1)
- 如何让新人尽快融入项目团队 (1)
- SharpDevelop (1)
- 生成PDF文件的Java库iText (1)
- 将Java包程序转换为Exe可执行文件 (1)
- hibernate hql 多个一查询 (1)
- 将视频放到网页上续 RM VS ASF (1)
- 程序员如何自我超越 (1)
- j2me实现手机通讯录的备份与还原 (1)
- Websphere 命令行部署与管理应用 (1)
- StackOverflow的404错误页面 (1)
- WM_CONCAT 函數的用法 (1)
- MyEclipse打jar包 (1)
- 通用分頁存儲過程. (1)
- 采用并行计算发挥多核CPU的威力 (1)
- mxgraph 之 增加对齐标线 等对graph的相关设置 (1)
- EJB中的@ejb注解 (1)
- UTMP分析 (1)
- .nET2.0小技巧 (1)
- spring security 和 struts 的filter顺序问题 (1)
- Session和Cookie的深入研究 (1)
最新评论
-
zhengyong7232:
<init-param> <param- ...
spring编码过滤器 -
emilyzhanghong:
你好:
请教下.你这里说的 B的war包中包含X的class ...
Maven中如何配WAR依赖WAR和JAR的多模块项目结构 -
jiangcs520:
好赞
程序员如何自我超越 -
wodentt:
看不懂....
将Java包程序转换为Exe可执行文件 -
student_stu:
...
jsessionid 问题分析
要使用的warpath插件包括以下插件配置元素在你的pom.xml
你要在classpath中包含的依赖关系,并添加warpath类型的war
注:war和warpath依赖类型是必需的:war类型是由使用maven的war-plugin做战争war,warpath类型的warpath插件,以确定项目的类路径正确的文件列入名单。
以下是还建议,以避免相同的jar依赖的几个版本,在最后的war,建立覆盖过程中,由于工件(所有的传递依赖)
先考虑如下实际情况:
war项目c和war项目b都依赖war项目a和jar项目x. 项目a中保存了b和c项目通用的web资源,比如通用的javascript,css,jsp等. 项目x中保存了b和c项目中都依赖的一些class
开发人员希望每次都只面对一个项目,即team a 开发项目a, team b开发项目b, team c开发项目c....以此类推
每个team在开发自己项目时,都希望能直接进行调试,例如war项目a可以直接部署到tomcat上运行测试
最后实际交付给客户的却只有2个项目: b和c .也就是说,最后要打包b和c,而在b和c的war包中都要包含a中的web资源和x中的class
在纯maven中的实现方案
纯maven环境比较简单,经过一段曲折(先是修改maven-war-plguin源码,再是自定义一个插件),最后发现居然有一个现成的插件可以实现这个功能,示范如下:
注意红色部分,说明如下:
首先是使用了maven-warpath-plugin插件,处理所有<type>warpath</type>的artifact,这个插件可以将从依赖的war中传递的依赖都打包到当前的war中,没有这个插件时,当前war从所依赖的war artifact那所传递来的依赖在打包成war时都会被忽略.既然现在能将传递的依赖打包了,就不用copy依赖的war中的web-inf/lib/*,所以被加入到<dependentwarexcludes>中
<workdirectory>的设置看我写的注释
webappdirectory的指定需要额外注意.首先,我使用了maven默认的资源路径,也就是 src/main/webapp,而这里却告诉maven-war-plugin另一个路径"webcontent",产生的结果就是,执行mvn package时,war-plugin和warpath-plugin会将当前war和所有依赖的war的web资源都拷贝到webcontent目录下.这样,webcontent目录包含的内容就是最终打包成war的内容了.
在eclipse集成了maven插件时的实现方案
纯maven确实很happy,但是我们开发项目可是要在eclipse中进行的,安装了m2e插件后 ,如何利用eclipse的wtp提供的server功能进行快速的部署调式,是个需要解决的问题.
在eclipse的配置文件".settings/.jsdtscope"修改<classpathentry kind="src" path="src/main/webapp"/>为<classpathentry kind="src" path="webcontent"/>
在".settings/org.eclipse.wst.common.component"中把<wb-resource deploy-path="/" source-path="/src/main/webapp"/>修改<wb-resource deploy-path="/web-inf/classes" source-path="/src/main/webapp"/>,并增加<wb-resource deploy-path="/" source-path="/webcontent"/>
ok,经过上述配置后,eclipse就把/webcontent目录认为web资源根路径了.这样在eclipse的servers view中,把这个war项目增加到tomcat上时,实际部署的就是/webcontent ,可以直接在eclipse部署运行这个war项目了
但是....实现了可以在eclipse上直接部署的功能后,我发现丧失了eclipse的文件变化监视功能.比如,原本在eclipse中修改一个jsp后,就可以自动同步到tomcat上,但现在我实际的web资源路径是src/main/webapp, 而eclipse识别的web资源路径却是webconten.我的文件修改都是在src/main/webapp,不执行mvn package是不会同步到webcontent中,eclipse也就不会把我修改的jsp同步到tomcat上.为了解决这个问题,我自定义了一个插件,示例如下:
这个插件绑定了@phase process-resources,所以在src/main/webapp下的文件有变化时,会自动被调用,将src/main/webapp下有变化的文件拷贝到webcontent目录下.这时就会被eclipse发现这个变化,从而同步到tomcat上.
原文http://www.cnblogs.com/discuss/articles/1866924.html
[...]<build> <plugins> <plugin> <groupid>org.appfuse</groupid> <artifactid>maven-warpath-plugin</artifactid> <version>1.0-snapshot</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>add-classes</goal> </goals> </execution> </executions> </plugin> </plugins></build>[...]
你要在classpath中包含的依赖关系,并添加warpath类型的war
[...]<dependencies> <dependency> <groupid>org.appfuse</groupid> <artifactid>appfuse-web</artifactid> <version>2.0</version> <type>war</type> </dependency> <dependency> <groupid>org.appfuse</groupid> <artifactid>appfuse-web</artifactid> <version>2.0</version> <type>warpath</type> </dependency></dependencies>[...]
注:war和warpath依赖类型是必需的:war类型是由使用maven的war-plugin做战争war,warpath类型的warpath插件,以确定项目的类路径正确的文件列入名单。
以下是还建议,以避免相同的jar依赖的几个版本,在最后的war,建立覆盖过程中,由于工件(所有的传递依赖)
[...]<build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-war-plugin</artifactid> <configuration> <dependentwarexcludes>web-inf/lib/*</dependentwarexcludes> </configuration> </plugin> </plugins></build>[...]
先考虑如下实际情况:
war项目c和war项目b都依赖war项目a和jar项目x. 项目a中保存了b和c项目通用的web资源,比如通用的javascript,css,jsp等. 项目x中保存了b和c项目中都依赖的一些class
开发人员希望每次都只面对一个项目,即team a 开发项目a, team b开发项目b, team c开发项目c....以此类推
每个team在开发自己项目时,都希望能直接进行调试,例如war项目a可以直接部署到tomcat上运行测试
最后实际交付给客户的却只有2个项目: b和c .也就是说,最后要打包b和c,而在b和c的war包中都要包含a中的web资源和x中的class
在纯maven中的实现方案
纯maven环境比较简单,经过一段曲折(先是修改maven-war-plguin源码,再是自定义一个插件),最后发现居然有一个现成的插件可以实现这个功能,示范如下:
<dependency> <groupid>com.isoftstone.gads</groupid> <artifactid>common-web</artifactid> <version>0.0.1-snapshot</version> <type>war</type></dependency><dependency> <groupid>com.isoftstone.gads</groupid> <artifactid>common-web</artifactid> <version>0.0.1-snapshot</version> <type>warpath</type></dependency> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-war-plugin</artifactid> <version>2.1-beta-1</version> <configuration> <!- 必须指定,否则默认会变成在target/war/work 导致被打包进war文件,指定后为target/work -> <workdirectory>${project.build.directory}/work</workdirectory> <webappdirectory>webcontent</webappdirectory> <usecache>false</usecache> <archive> <addmavendescriptor>true</addmavendescriptor> </archive> <overlays> <overlay> <groupid>com.isoftstone.gads</groupid> <artifactid>ebiz-common-web</artifactid> </overlay> <overlay> <!-- empty groupid/artifactid is detected as the current build --> <!-- 代表当前war项目,默认情况下当前war项目是先被拷贝的,如果要控制其顺序,则使用空的overlay --> <!-- any other overlay will be applied after the current build since they have not been configured in the overlays element --> </overlay> </overlays> <dependentwarexcludes>*/web.xml,web-inf/lib/*,/sql-map-config.xml,/jdbc.properties,/meta-inf/*</dependentwarexcludes> </configuration> </plugin><plugin> <groupid>org.appfuse.plugins</groupid> <artifactid>maven-warpath-plugin</artifactid> <version>2.1.0-m1</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>add-classes</goal> </goals> </execution> </executions> <configuration><!-- below web-inf/classes --> <warpathexcludes>**/logback-test.xml</warpathexcludes> </configuration></plugin>
注意红色部分,说明如下:
首先是使用了maven-warpath-plugin插件,处理所有<type>warpath</type>的artifact,这个插件可以将从依赖的war中传递的依赖都打包到当前的war中,没有这个插件时,当前war从所依赖的war artifact那所传递来的依赖在打包成war时都会被忽略.既然现在能将传递的依赖打包了,就不用copy依赖的war中的web-inf/lib/*,所以被加入到<dependentwarexcludes>中
<workdirectory>的设置看我写的注释
webappdirectory的指定需要额外注意.首先,我使用了maven默认的资源路径,也就是 src/main/webapp,而这里却告诉maven-war-plugin另一个路径"webcontent",产生的结果就是,执行mvn package时,war-plugin和warpath-plugin会将当前war和所有依赖的war的web资源都拷贝到webcontent目录下.这样,webcontent目录包含的内容就是最终打包成war的内容了.
在eclipse集成了maven插件时的实现方案
纯maven确实很happy,但是我们开发项目可是要在eclipse中进行的,安装了m2e插件后 ,如何利用eclipse的wtp提供的server功能进行快速的部署调式,是个需要解决的问题.
在eclipse的配置文件".settings/.jsdtscope"修改<classpathentry kind="src" path="src/main/webapp"/>为<classpathentry kind="src" path="webcontent"/>
在".settings/org.eclipse.wst.common.component"中把<wb-resource deploy-path="/" source-path="/src/main/webapp"/>修改<wb-resource deploy-path="/web-inf/classes" source-path="/src/main/webapp"/>,并增加<wb-resource deploy-path="/" source-path="/webcontent"/>
ok,经过上述配置后,eclipse就把/webcontent目录认为web资源根路径了.这样在eclipse的servers view中,把这个war项目增加到tomcat上时,实际部署的就是/webcontent ,可以直接在eclipse部署运行这个war项目了
但是....实现了可以在eclipse上直接部署的功能后,我发现丧失了eclipse的文件变化监视功能.比如,原本在eclipse中修改一个jsp后,就可以自动同步到tomcat上,但现在我实际的web资源路径是src/main/webapp, 而eclipse识别的web资源路径却是webconten.我的文件修改都是在src/main/webapp,不执行mvn package是不会同步到webcontent中,eclipse也就不会把我修改的jsp同步到tomcat上.为了解决这个问题,我自定义了一个插件,示例如下:
<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-websources-plugin</artifactid> <version>0.0.1-snapshot</version> <executions> <execution> <goals> <goal>websources</goal> </goals> </execution> </executions></plugin>
这个插件绑定了@phase process-resources,所以在src/main/webapp下的文件有变化时,会自动被调用,将src/main/webapp下有变化的文件拷贝到webcontent目录下.这时就会被eclipse发现这个变化,从而同步到tomcat上.
原文http://www.cnblogs.com/discuss/articles/1866924.html
评论
1 楼
emilyzhanghong
2012-03-06
你好:
请教下.你这里说的 B的war包中包含X的class ,是包含X的jar 还是X里面所有的class文件都会到B项目中的class里面去呢?
谢谢!
请教下.你这里说的 B的war包中包含X的class ,是包含X的jar 还是X里面所有的class文件都会到B项目中的class里面去呢?
谢谢!
发表评论
-
Session和Cookie的深入研究
2012-02-08 14:42 807Session和Cookie的深入研究 作者:孙鑫 ... -
spring security 和 struts 的filter顺序问题
2012-02-08 12:03 1041使用spring security3 和struts2 ... -
.nET2.0小技巧
2012-02-04 15:09 769<div class="pos ... -
UTMP分析
2012-02-03 10:34 837[size=small;]分析引擎包含:<br& ... -
EJB中的@ejb注解
2012-02-02 12:24 964(本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借 ... -
mxgraph 之 增加对齐标线 等对graph的相关设置
2012-02-02 11:49 1637graph.setConnectable(tru ... -
采用并行计算发挥多核CPU的威力
2012-02-01 09:24 738<p><strong>< ... -
通用分頁存儲過程.
2012-01-11 13:29 803MSSQL中要想分頁只能借助 row_number() ... -
MyEclipse打jar包
2011-12-28 14:43 981<span style="font-f ... -
WM_CONCAT 函數的用法
2011-12-28 12:09 952<span style="font-f ... -
StackOverflow的404错误页面
2011-12-21 17:28 866<span style="color: ... -
Websphere 命令行部署与管理应用
2011-12-21 11:44 954<span style="color: ... -
j2me实现手机通讯录的备份与还原
2011-12-20 13:44 972现在用的手机用了4年半了,其中摔过n次,但是从没坏过, ... -
程序员如何自我超越
2011-12-19 13:24 646<span style="font-f ... -
将视频放到网页上续 RM VS ASF
2011-12-17 15:59 902发现网页上包含RM视频文件的一个致命弱点,那就是必须将 ... -
hibernate hql 多个一查询
2011-12-15 16:49 947Session s=sessionFactory.ge ... -
将Java包程序转换为Exe可执行文件
2011-12-14 10:39 841<p class="MsoNorma ... -
生成PDF文件的Java库iText
2011-12-14 09:44 747<p class="MsoNo ... -
SharpDevelop
2011-12-13 14:54 1201SharpDevelop是一个DotNet平台下的免费 ... -
如何让新人尽快融入项目团队
2011-12-13 10:54 743刚进公司的新人,从心理上要有个从学校到公司的转变的过 ...
相关推荐
Maven构建多模块项目极大地简化了大型项目的管理,通过合理地组织模块间的依赖关系和统一的配置管理,提高了开发效率和代码质量。实践中,需要灵活运用Maven的各种特性,结合最佳实践,以构建高效、稳定的多模块...
"Maven引入本地Jar包并打包进War包中的方法" Maven是一种流行的项目管理工具,主要用于Java项目的构建、测试和部署。在实际开发中,我们经常需要引入本地Jar包以满足项目的需求。本文将介绍Maven引入本地Jar包并...
java运行依赖jar包
总结来说,Maven多模块项目是一种优秀的代码组织方式,它通过模块化的结构提高了代码的可读性和可维护性,同时也简化了构建和依赖管理。在"ssm_modules"实例中,我们可以学习到如何根据SSM框架创建和配置多模块项目...
总之,"maven多模块项目工程-已搭建好"是一个已经配置好的、使用Eclipse开发的项目结构,通过"xd-parent"模块实现了依赖和插件的集中管理,方便开发者进行模块化开发,提高了项目的可维护性和开发效率。在实际使用中...
总结来说,Maven构建多模块项目能够帮助开发者有效地组织大型项目,通过父子项目结构和依赖管理,实现模块间的解耦和协同开发。"simple-parent"项目就是一个典型的例子,它展示了如何创建和管理一个包含多个子模块的...
整个项目以pom型项目进行组织,其模块可以是jar项目,也可以是war项目,也可以pom项目。合理的使用maven-module项目,可以是项目结构分明,同时提高了代码的复用性。本文以maven插件官方示例(具体地址请查看附录)...
java运行依赖jar包
通过这个“maven 模块化项目demo”,开发者可以学习如何划分项目结构,如何配置POM文件,以及如何利用Maven管理多模块项目。这有助于提升开发效率,降低维护成本,同时便于团队协作,因为每个人都只需要关注自己负责...
maven-war-plugin-2.0.2.jar
首先,我们要理解Maven的多模块项目结构。在Maven中,一个项目可以被分解为多个子项目,这些子项目共享相同的父 pom.xml 文件,这就是所谓的多模块项目。在`demo-parent`案例中,"parent"通常表示顶层的父模块,它...
在Spring Boot项目中,经常需要将项目打包成一个可执行的Jar文件,便于部署和分发。而Maven作为构建工具,提供了强大的自动化构建功能,能够帮助开发者轻松地实现这一目标。 #### 知识点详解 ##### 1. Maven与...
在Java开发中,Maven是一个强大的构建工具,它简化了项目的构建、依赖管理和部署过程。本文将详细讲解如何使用Maven来打包一个Java项目,并创建JAR文件。 首先,Maven有三个主要生命周期阶段:`clean`、`default`...
本篇文章将详细讲解如何在Eclipse中创建一个基于Maven的多模块项目。 首先,了解Maven的基本概念至关重要。Maven通过Project Object Model (POM)来描述项目,并利用约定优于配置的原则来简化构建过程。POM文件包含...
总结起来,"ssm+maven多模块项目搭建"是一个涉及Spring、SpringMVC、Mybatis和Maven四个关键技术的项目实践,它展示了如何在Java Web开发中运用这些工具进行模块化设计和构建,以达到提高开发效率和代码质量的目标。...
maven-war-plugin-20030413.023708.jar
【标题】"springboot_jsp_maven(war+jar)"是一个综合了Spring Boot、JSP和Maven技术的示例项目,旨在展示如何在Spring Boot框架下开发并部署包含Web界面的应用程序。该项目的独特之处在于它同时支持两种常见的部署...
在Maven多模块项目中,通常会有以下几个层次结构: 1. **顶层父项目(Parent Project)**:顶层父项目不包含任何源代码,它的主要作用是定义共用的配置,如版本管理、依赖管理和构建设置。在`parentProj`这个例子中...
Maven 多模块项目搭建是一个常见的Java开发任务,它允许开发者将大型项目分解成更小、更易管理的模块,每个模块专注于特定的功能或组件。在本教程中,我们将探讨如何使用Eclipse集成开发环境(IDE)和Maven插件来...
总的来说,"maven多模块web项目"是一个采用Maven构建、整合Spring MVC和Spring的Web应用程序,利用IDEA进行开发,拥有清晰的模块化结构和标准的Web应用目录布局,便于团队协作和维护。通过理解Maven的生命周期和目标...