设为首页 收藏本站
查看: 999|回复: 0

[经验分享] 多模块Maven环境下,如何在eclipse构建J2EE调试环境(热替换)

[复制链接]

尚未签到

发表于 2017-2-28 10:31:19 | 显示全部楼层 |阅读模式
  本文对于eclipse下maven的开发环境有一个不错的整理,至少在网上没有看到相关的文章,可以提高生成效率,统一开发环境。
  本人或者看到别人经历过多次因环境问题,很影响效率的,环境配置好了,会节约很多时间,希望此文给你不少帮助。
背景:
  1.项目有多个模块组成,如a.war(它依赖b.jar,c.jar,d.jar),各个模块皆为maven工程
  2.使用eclipse ee ide版本(3.7)eclipse-jee-indigo-SR2-win32.zip,maven 3.0.4,版本差异不会很大,eclipse已完成m2eclipse插件(插件直接在eclipe market点install即可,装了maven intergration for WTP更好,后面有图片对比)。
  3.Tomcat使用外置tomcat,在eclipse里配置即可。
目标:
  1.a.war在eclipse下的tomcat启动完成以后,能热替换a.war,b.jar,c.jar..等类的修改(不包括方法签名的变更,如修改方法名,增加减少方法名;以及配置文件变更)
  2.项目导出后,能(其实是生成.classpath..settings相关文件)
  2.1自己把项目设置为maven项目,如果是war项目,能自动设置为facet project
  2.2对于war工程,能自动生成部署相关参数
  2.3默认设置编译级别,代码编码(UTF-8),源目录路径等相关设置
  注:
  1.本人不喜使用远程调试解决问题,这种调试很麻烦,效率不是很高,习惯了可能还好【如使用mvn jetty/tomcat,以调试部署完成后再连接远程端口调试,此问题在于,b.jar的修改,必须install,重启服务器,这样会浪费很多时间在重启服务器上】
  2.上述的目标,您可以通过手工解决所有问题,但不如自动来的方便,而且可以使用开发小组形成一个风格
  方法:
maven配置
  个人建议:对于jar工程,创建一个jar-template的maven工程,类型为pom,作为所有jar工程的父工程;同样的,war工程同时创建一个。这样的好处有:
  集中管理jar;统一配置jar工程,包括编译级别,目录结构,代码编码….
  如果配置完成,只要执行mvn eclipse:clean eclipse:eclipse即可完成对所有工程的配置。(此命令是先删除.project,.classpath..setting相关配置,再生成)
  可以通过以下片段完成以上目标(jar,war工程一起说明了,差异很小):
  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">      
    <modelVersion>4.0.0</modelVersion>
  
    <groupId>com.xia.biz</groupId>      
    <artifactId>jar-project-template</artifactId>      
    <version>1.0.0-SNAPSHOT</version>      
    <packaging>pom</packaging>      
    <description>Module:: Template :: Java Project </description>
  <properties>
  <!-- 项目编码设置,仅对maven有效,方便CI -->        
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <!-- 版本集中设置,方便调整-->        
        <org.springframework.version>3.1.0.RELEASE</org.springframework.version>      
        <org.springframework.security.version>3.1.0.RELEASE</org.springframework.security.version>      
        <spring.security.cas.version>3.0.7.RELEASE</spring.security.cas.version>      
        <org.slf4j.version>1.6.1</org.slf4j.version>      
        <org.hibernate.version>4.1.1.Final</org.hibernate.version>      
        <org.hibernate.annoation.version>3.3.0.ga</org.hibernate.annoation.version>      
        <org.hibernate.validator.version>4.3.0.Final</org.hibernate.validator.version>      
        <org.apache.velocity.version>1.6.3</org.apache.velocity.version>      
        <org.hsqldb.version>2.2.8</org.hsqldb.version>      
        <junit.version>4.10</junit.version>      
        <org.mockito.version>1.9.0</org.mockito.version>      
        <h2.version>1.3.161</h2.version>      
        <jetty.version>7.6.3.v20120416</jetty.version>      
        <selenium.version>2.21.0</selenium.version>      
        <spring-data-jpa.version>1.1.0.RELEASE</spring-data-jpa.version>      
    </properties>
  <build>
        <!-- 工程路径结构设置 -->      
        <sourceDirectory>src/main/java</sourceDirectory>        
        <testSourceDirectory>src/test/java</testSourceDirectory>
  
        <testOutputDirectory>target/classes</testOutputDirectory>        
        <outputDirectory>target/classes</outputDirectory>
          <resources>        
            <resource>         
                <directory>src/main/resources</directory>         
            </resource>         
        </resources>
          <testResources>        
            <testResource>         
                <directory>src/test/resources</directory>         
            </testResource>         
        </testResources>         
        <plugins>      
            <plugin>      
                <groupId>org.apache.maven.plugins</groupId>      
                <artifactId>maven-compiler-plugin</artifactId>      
                <configuration>
                     <!-- 编译级别设置 -->      
                   <source>1.6</source>        
                    <target>1.6</target>      
                </configuration>      
                <version>2.5.1</version>      
            </plugin>
  <!-- eclipse插件设置 -->      
            <plugin>      
                <groupId>org.apache.maven.plugins</groupId>      
                <artifactId>maven-eclipse-plugin</artifactId>      
                <version>2.9</version>      
                <configuration>      
                    <addVersionToProjectName>false</addVersionToProjectName>      
                    <useProjectReferences>false</useProjectReferences>      
                    <encoding>UTF-8</encoding><!-- 项目编码设置 -->      
                    <wtpmanifest>false</wtpmanifest>      
                    <wtpapplicationxml>true</wtpapplicationxml>      
                    <wtpversion>2.0</wtpversion>      
                    <additionalBuildcommands>
                                  <!-- 项目属性设置,相当于配置.project,以下配置为,此工程将使用以下去建构java构建,maven构建,validation构建 -->      
                        <buildcommand>org.eclipse.jdt.core.javabuilder</buildcommand>        
                        <buildcommand>org.eclipse.wst.validation.validationbuilder</buildcommand>         
                        <buildcommand>org.eclipse.m2e.core.maven2Builder</buildcommand>
                             <buildcommand>org.eclipse.wst.common.project.facet.core.builder</buildcommand><!-- 如果是war工程,请加入此行,它会标识此工程可以部署 -->         
                    </additionalBuildcommands>
  <additionalProjectnatures>
                            <!--项目属性设置,同时配置.project,相关.settings目录下的配置。它标识工程为:spring工程,maven工程,java工程,modulecore木有研究-->      
                        <nature>org.springframework.ide.eclipse.core.springnature</nature>        
                        <nature>org.eclipse.m2e.core.maven2Nature</nature>         
                        <nature>org.eclipse.jdt.core.javanature</nature>         
                        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>         
                    </additionalProjectnatures>      
                    <classpathContainers>
  <!--,classth配置,将加入默认的jre,以及maven路径 -->      
                        <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>        
                        <classpathContainer>org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER</classpathContainer>
                           <nature>org.eclipse.wst.common.project.facet.core.nature</nature><!-- war项目,设置可通过tomcat设置的项目-->         
                    </classpathContainers>      
                    <additionalProjectFacets>
  <!-- 这个很重要,从b工程点C工程的class,可以直接到C工程,而不是点到.class文件;同时可以热替换a.war下的b.jar-->      
                   <resolveWorkspaceProjects>true</resolveWorkspaceProjects>      
                    </additionalProjectFacets>      
                </configuration>      
            </plugin>
结果检验
  运行mvn eclipse:clean eclipse:eclipse,再刷新工程,你会看到以下截图(以war工程为例):
  1.小M出现,表示是一个Maven工程 DSC0000.png
  2.目录结构: DSC0001.png 标准的war工程目录结构,已加入jre的classpath,Maven依赖
  展开maven依赖:开头: DSC0002.png ,结尾: DSC0003.png ,出现了工程名的依赖,如framework-core,那么,表示,此工程可以热替换。
  3.工程属性
DSC0004.png

  以下二个截图是没有安装maven integration for WTP(在eclipse martet查询下载)
DSC0005.png

DSC0006.png

  如果安装了maven for WTP,那么,展现如简洁很多,如:
DSC0007.png

DSC0008.png

  以下会自动创建
DSC0009.png

  在tomcat的配置中,去掉自动重启,那么除配置的变化 ,以及变更方法签名,那么,都可以即时生效的。
DSC00010.png

  说明,myeclipse与eclipse使用的maven插件有差异,可自己调整一下配置即可解决问题(好像是org.eclipse.m2e.->org.eclipse.ide)。
  如果您使用mvn eclipse:eclipse不能达到以上目标,建议你建一个工程,叫build-all,pom内容为:
  <modules>
        <!-- components -->
<module>../a</module>
<module>../b</module>
  然后使用eclipse的import->exists maven project,eclipse会自动生成相关参数,这样的配置是最准确的。
  ===========
  经过后续几天的测试,发现,最好的方式是:
  在POM.xml里按上述配置,再使用m2e自带的功能,import maven project或者 import from scm这二种方式。
本文为作者一一配置调整得出的结论,如您使用后,出现问题,欢迎指正。如能给您还来好处,是我的莫大的荣幸。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348314-1-1.html 上篇帖子: tcp链接的几种状态&tcpdump抓包 下篇帖子: Exception from System.loadLibrary(smjavaagentapi) java.lang.UnsatisfiedLinkError
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表