使用Maven如何debug和热部署

nick_chen 发布于 2013/01/21 09:50
阅读 35K+
收藏 2

最近尝试将项目用Maven管理,Maven管理能力确实不错,但在开发时,却遇到了一些问题,望大家指点:

1、debug问题:

    我是使用Maven的tomcat插件:tomcat-maven-plugin在eclipse里直接集成tomcat,使用eclipse中Debug模式的maven tomcat:run的方式启动tomcat,但是设置好断点后,可以debug到,但却关联不到源码,我也在Debug configuration里的source标签中关联了源码工程,但还是不行,不知该如何配置。

2、热部署问题:

    使用maven能不能类似ant那样,自定义一个热部署的target,每当关联目录内容发生改变时,便将更新的文件拷贝到目标目录中;另外,我还特意测试了一下,使用maven install后,在target目录会生成一个应用文件夹,一个应用war包,我使用上述方式启动tomcat后,无论手工更新文件夹还是war中的jsp内容,刷新页面时都不生效。

加载中
0
JavaOlder
JavaOlder

回答第一个问题 。

通过远程调试的方式实现eclipse debug maven
test,具体就是在执行test时带上debug参数,如上:
mvn-Dmaven.surefire.debug
test
然后到eclipse上配置远程java调试参数("Run" > "Open Debug Dialog..."选择新建remote java
application),执行debug即可。

 

nick_chen
nick_chen
可以详细说一下实现eclipse debug maven test的操作流程吗?
0
JavaOlder
JavaOlder

回答第二个问题。

首先在maven工程的pom.xml文件中增加tomcat插件:

Xml代码


  1. <plugin>
  2.     <groupId>org.codehaus.mojo</groupId>
  3.     <artifactId>tomcat-maven-plugin</artifactId>
  4.     <configuration>
  5.      <url>http://localhost:8088/manager</url>
  6.     </configuration>
  7. </plugin>
复制代码


其次,在tomcat/conf/目录下的tomcat-users.xml文件中,增加如下管理帐号:其中admin帐号的密码为空

Xml代码

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <tomcat-users>
  3.   <role rolename="manager"/>
  4.   <user username="admin" password="" roles="manager"/>
  5. </tomcat-users>
复制代码






最后,启动tomcat,在maven工程目录下运行命令:

mvn war:exploded tomcat:exploded  //以目录方式部署

或者mvn tomcat:deploy //以war形式部署

可以搭配mvn tomcat:undeploy 以及 mvn tomcat:redeploy 配合使用。

 

0
nick_chen
nick_chen

引用来自“JavaNewPer”的答案

回答第二个问题。

首先在maven工程的pom.xml文件中增加tomcat插件:

Xml代码


  1. <plugin>
  2.     <groupId>org.codehaus.mojo</groupId>
  3.     <artifactId>tomcat-maven-plugin</artifactId>
  4.     <configuration>
  5.      <url>http://localhost:8088/manager</url>
  6.     </configuration>
  7. </plugin>
复制代码


其次,在tomcat/conf/目录下的tomcat-users.xml文件中,增加如下管理帐号:其中admin帐号的密码为空

Xml代码

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <tomcat-users>
  3.   <role rolename="manager"/>
  4.   <user username="admin" password="" roles="manager"/>
  5. </tomcat-users>
复制代码






最后,启动tomcat,在maven工程目录下运行命令:

mvn war:exploded tomcat:exploded  //以目录方式部署

或者mvn tomcat:deploy //以war形式部署

可以搭配mvn tomcat:undeploy 以及 mvn tomcat:redeploy 配合使用。

 

我的plugin配置如下:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<port>80</port>
<URIEncodeing>utf-8</URIEncodeing>
<url>http://127.0.0.1/manager</url>
</configuration>
</plugin>

然后用maven tomcat:run启动tomcat,修改完jsp后,然后使用maven war:exploded tomcat:exploded部署,但是此时:http://127.0.0.1/manager并不存在啊,是我理解有误?

0
nick_chen
nick_chen
我想我理解错了,如果我不使用maven插件的eclipse集成启动tomcat的功能,这一切就都好理解了,仍然使用wtp集成tomcat,那debug的事情就顺理成章了,使用 JavaNewPer 所说的部署方法,直接将应用部署到wtp server对应的tomcat上,而不是maven集成的tomcat上,也就不会出现http://127.0.0.1/manager不存在的问题了,但是热部署的问题还依然存在,我是想实现像ant脚本那样,在eclipse里改完jsp后,会自动更新到tomcat中,而不是在执行一遍maven war:exploded。
nick_chen
nick_chen
回复 @JavaNewPer : 多谢,如果需要再贴不迟,我自己先试过再说。
JavaOlder
JavaOlder
如果需要我把代码给你贴上来~
JavaOlder
JavaOlder
那你直接配置tomcat的热部署就可以了!
0
l
li_chao
哥们儿,最后你那个热部署问题解决了吗,怎么解决的??求教~~
nick_chen
nick_chen
没有,最近暂时撂开了,有结果告诉你。
0
fuoing
fuoing

其实可以用jreble+maven+tomcat进行热部置的

1.在pom.xml中的 build 添加以下代码:

 <plugins>

        
        <plugin>
            <groupId>org.zeroturnaround</groupId>
            <artifactId>javarebel-maven-plugin</artifactId>
            <version>1.0.5</version>
            <executions>
                <execution>
                    <id>generate-rebel-xml</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
         
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
            <version>1.1</version>
            <configuration>
                <path>/gt</path>
                <port>80</port>
                <uriEncoding>UTF-8</uriEncoding>
            </configuration>
        </plugin>
 
    </plugins>


2. Run As > Run Configurations >  Maven Build > Main > Goals

中添加:tomcat:run



3. run


这样就可以热部置了,但是我用的jahia中的tomcat,用上面的方法行不通

nick_chen
nick_chen
多谢。
0
fuoing
fuoing

还有,要打上jreble


0
java_speed
java_speed
export MAVEN_OPTS="${MAVEN_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE"
  1. 新增上面到环境变量;
  2. 正常启动maven,  mvn ... (会多开一个调试端口8000)
  3. 在Eclipse,Debug AS 》Debug configurations > Remote Java Application > 右键 > new > 填好 host, port(就是上面的8000) > Debug


0
s
sunxiaoguolfxy
支持一下,最近也是碰到这两个问题。不知楼主是否已经解决了?求共享哇。
返回顶部
顶部