一、日期:
内容:解决使用Maven搭建的SSH框架下的用Tomcat断点调试项目
一、项目介绍和pom内容分析:
1、项目介绍
最近个人在学习SSH框架的内容,然后在一个偶然的机会了解到使用Maven部署项目的话会给开发带来前所未有的遍历,因此在个人折腾一番之后基本上了解了 Maven的基本使用规则和如何从基本出发部署一个JavaWeb项目。我个人搭建的这个框架完全只是为了个人学习框架使用。
2、pom介绍:
在搭建框架的当初,仅仅是为了让项目在使用Maven搭建的倩况下赶快跑起来,但是在一个偶然的机会需要断点调试的时候却始终都跑不到debug里去。以下是我的 pom的内容:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>o_OnlyOne_o</groupId>
<artifactId>O_OnlyOne_O</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 添加项目依赖包的版本号描述 -->
<properties>
<!-- 添加单元测试包 -->
<junit.version>4.10</junit.version>
<!-- 添加spring3.2.8依赖包的版本描述 -->
<spring.version>3.2.8.RELEASE</spring.version>
<!-- 添加Hibernate4.3.8依赖jar包 -->
<hibernate.version>4.2.8.Final</hibernate.version>
<!-- 添加sevlet版本 -->
<servlet.version>3.1.0</servlet.version>
<!-- jetty的版本 -->
<jetty.version>9.3.6.v20151106</jetty.version>
<!-- struts版本 -->
<struts.version>2.3.24</struts.version>
<!-- 添加ognl依赖jar包的版本 -->
<ognl.version>3.0.6</ognl.version>
<!-- tomcat的版本 -->
<tomcat.version>2.2</tomcat.version>
<!-- mysql驱动包的版本 -->
<mysql.version>5.1.38</mysql.version>
<!-- 假如log4j.jar2.2版本 -->
<log4j.version>1.2.17</log4j.version>
<!-- ****************************数据库连接池的jar包版本**************************** -->
<!-- 其中数据库连接池有: C3P0,Druid,DBCP等,在这里使用 Druid-->
<druid.version>1.0.18</druid.version>
<!-- ****************************数据库连接池的jar包版本**************************** -->
<!-- 使用Spring的aop时需要使用到aspectjweaver包,所以需要添加aspectjweaver包 -->
<aspectjweaver.version>1.8.9</aspectjweaver.version>
<!-- 添加JSTL版本 -->
<jstl.version>1.2</jstl.version>
</properties>
<dependencies>
<!-- 添加使用JSTL标签支持 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- 添加单元测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- 添加spring的依赖jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 添加Java servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<!-- 设置在编译时运行 -->
<scope>provided</scope>
</dependency>
<!-- 添加struts2依赖jar包 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
<!--
这里的 exclusions 是排除包,因为 Struts2中有javassist,Hibernate中也有javassist,
所以如果要整合Hibernate,一定要排除掉Struts2中的javassist,否则就冲突了。
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
-->
</dependency>
<!-- struts2和Spring整合时需要使用到的插件 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- 使用了这个插件之后,就可以采用注解的方式配置Struts的Action,免去了在struts.xml中的繁琐配置项 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- config-browser-plugin插件不是必须的,但是使用了这个插件之后,就可以很方便的浏览项目中的所有action及其与 jsp view的映射 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-config-browser-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- 添加ognl依赖jar包 -->
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>${ognl.version}</version>
</dependency>
<!-- 添加Hibernate依赖包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- 添加mysql依赖jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- ****************************数据库连接池的jar包**************************** -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- ****************************数据库连接池的jar包**************************** -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<!--
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
-->
</dependencies>
<span style="color:#ff0000;"><build>
<finalName>onlyOne</finalName>
<plugins>
<plugin>
<!-- 使用tomcat作为web容器,将jetty注释掉
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<executions>
<execution>
<!-- 设置在打包的阶段 -->
<phase>package</phase>
<goals>
<goal>
run
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build></span>
</project>
代码中标注红色的部分表示使用的服务器插件是Tomca7t的
tomcat7-maven-plugin插件,当然也可以使用jetty作为自己的Web容器。在启动运行项目使用的命令属于 Maven命令,而且在打包阶段就可以直接运行项目。
这就是表示在项目打包的时候就直接启动并运行项目。但是这样启动项目的方式时不可以进入DEBUG的,可能这样的启动方式没有直接将项目直接部署到Tomcat容器 中去,今天在这里就彻底的解决这个困扰已久的问题。
二、解决不能断点调试的问题:
1、修改Pom.xml配置文件添加Tomcat7插件:
<plugin>
<!-- 导入Tomcat7插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<configuration>
<port>8080</port><!-- 服务器端口号,默认是8080 -->
<path>/O_OnlyOne_O</path><!-- 访问应用的路径 -->
<uriEncoding>UTF-8</uriEncoding><!-- 项目编码方式 -->
<finalName>O_OnlyOne_O</finalName><!-- 项目名字 -->
<url>http://localhost:8080/O_OnlyOne_O/</url>
<server>tomcat7</server><!-- 服务器的名字 -->
</configuration>
</plugin>
将如上的红色部分注释掉然后添加这部分代码。
2、打开调试窗口:
新建一个"Maven Build"
如上操作就基本配置好了调试的准备工作:
2、在需要调试的source中添加断点:
3、启动服务器:
4、访问加断点Action所对应的画面
5、debug进入加断点的地方:
提示:找不到source,这个已经不是什么问题了,只需要手动添加source就搞定了。
OMG!确实进去了。
三、总结:
这个问题困扰已久了,只是很多时候没有用到debug,所以就把它搁置了,今天正好有时间所以将其解决。其实,很多事情只要用心就没什么困难不可以解决。