背景:Java开发的maven项目,一直都是用eclipse 的export导出war包,然后在Tomcat上部署的,想把编译写成工具,就安装了apache-maven,使用maven命令行进行编译。结果:eclipse导出的war包,可以正常运行,但是 maven命令编译的war包,运行报错:
严重: The web application [/data-quality] registered the JDBC driver [oracle.jdbc.driver.OracleDriver]
but failed to unregister it when the web application was stopped.
To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
处理过程:
第一步:
报错了,首先就是百度,搜索这个错误,很多人说是Tomcat7 增加了内存泄漏检测监听器,在 server.xml 中,将监听器注释掉就行。
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
注释掉,启动还是不行。
有说Tomcat版本,降到6的,有说将jdbc的包,放到Tomcat 的lib目录下的,还有的是数据库连接配置写错的,当然这是别人遇到的问题,都不是我这里的情况。
第二步:
因为项目一直是这样编译运行的,就感觉不是Tomcat的问题,也不是项目的问题,就用 eclipse 编译的war包,与 maven命令编译的war包,在同一个Tomcat部署目录下,进行试验,发现 eclipse 编译的包,运行没问题,maven命令编译的包,报错。用比较工具比较两个war包,class都是一样的,只有 META-INF目录下 pom.property 不一样,不一样的地方,还是 编译者不一样,一个是 maven-compiler插件,一个是 Tomcat-maven。很奇怪,就在网上搜 maven命令编译与eclipse 插件编译有什么区别,也没找到。
第三步:
开始只关注编译出来的文件,哪些有差异,但是没有在意pom.property文件,就是只发现他们两个文件不一样,但是没在意。没找到 命令编译和插件编译的区别, 突然就在想,会不会就是这个pom.property文件导致的?然后就是找了之前 使用命令编译的项目,发现 pom文件配置build属性不一样。改了之后,果然 编译的war包可以运行了,虽然还不明白为什么~~
总结:本次运行不通过,如果不是一个已经成熟的项目,真的会怀疑 Tomcat的问题?配置的问题?数据库的问题?到最后发现都不是。。。pom配置,也挺重要的。
命令编译配置:
<profiles> <!-- 配置版本 -->
<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
<build> <!-- 配置 resource,要编译的文件 -->
<finalName>test</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>version/*</exclude> <!-- 不包含的文件 -->
</excludes>
</resource>
</resources>
</build>
插件编译配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8088/manager/text</url>
<server>tomcat</server>
<username>tomcat</username>
<password>tomcat</password>
<uriEncoding>UTF-8</uriEncoding>
<path>/${finalName}</path>
<port>9002</port>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warName>${project.artifactId}-${project.version}</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<defaultGoal>install</defaultGoal>
</build>