Ant项目升级到Maven
前提
- 首先开发环境已经安装了Maven
- 并且开发工具需要支持Maven(版本不能太老),开发工具最后不要太老了
- 并且已经配置好了Maven,然后才能进行下一步。
步骤
- 新建一个Maven项目
- 把ant的项目的src下目录copy到
src\main\java
下, - 把ant项目的配置文件全部copy到
src\main\resources
下, - 把ant项目的页面、js、css等copy到
src\main\webap
下
注意:要把ant项目下的WEB-INF/lib下的jar全部删除掉,保留lib目录
- jar包处理
在pom.xml文件中添加以下配置:
- 私服仓库地址
- 插件管理中添加maven插件的支持、
- resource配置资源文件路径,源文件路径
- 项目所用的jar都要添加到pom文件中(这是个比较繁琐的工作,容易造成jar冲突),个人建议,最好和项目中使用的jar的版本保持一致。
注意:有时候pom中添加了jar后它还依赖了其他jar,这个时候处理起来就比较麻烦了,需要一个一个找是哪个jar的问题。
遇到的坑
- 导入jaxen.1.1.3.jar后会报错
Failure to find maven-plugins:maven-findbugs-plugin:plugin:1.3
Failure to find maven-plugins:maven-cobertura-plugin:plugin:1.3
原因:因为jaxen-1.1.3依赖了以上两个JAR
解决方案: 需要改为下面的导入方式
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.3</version>
<exclusions>
<exclusion>
<artifactId>maven-cobertura-plugin</artifactId>
<groupId>maven-plugins</groupId>
</exclusion>
<exclusion>
<artifactId>maven-findbugs-plugin</artifactId>
<groupId>maven-plugins</groupId>
</exclusion>
</exclusions>
</dependency>
- @Repository注解报错
原因:经过jar的反复检查发现@Repository
引用的是spring-2.0.jar
里的,实际应该引用spring-context-3.2.2.RELEASE.jar
中的。
经排查,jcaptcha-all.1.0-RC6.jar
中依赖了spring-2.0.jar
JAR,因为当时私服上没有jcaptcha-1.0-all.jar
,只有jcaptcha-all.1.0-RC6.jar
所以就用了它,真是好坑啊[流泪]
<dependency>
<groupId>com.octo.captcha</groupId>
<artifactId>jcaptcha-all</artifactId>
<version>1.0-RC6</version>
</dependency>
解决方案:把jcaptcha-1.0-all.jar放到项目中进行引用
-
mvn install无法生成war包
在myeclipse中使用mvn的install无法生成war包
在项目目录下cmd中使用mvn install可以正常生成
应该是myeclipse的maven配置问题(老项目使用的旧版本的开发工具),切换开发工具 -
java.lang.NoSuchMethodError: org.hibernate.cfg.Environment.verifyProperties(Ljava/util/Map;)V
原因:hibernate的jar冲突,引用了spring-hibernate3,里面依赖了hibernate的4.x,导致jar冲突。
解决方案:删除spring-hibernate3,把hibernate3.jar放入lib下进行引用 -
部署到Tomcat后
webapps/项目名称
中只有META-INF、WEB-INF
原因:myeclipse中项目配置问题
解决方案:在项目上右单击—>Properties—>Deployment—>Deployment Assembly在右侧中选择src\main\webap
的Deploy Path的值(双击选中),修改为/
。
如果要部署到ROOT目录里,需要把这个页面中的Web Context Root
的修改为/
。
- Jenkins中 编译报错
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.sonarsource.scanner.maven, org.apache.maven
.plugins, org.codehaus.mojo] available from the repositories [local (D:\apache-maven\repository), nexus (http://192.168.20.206:8081/reposito
ry/public)] -> [Help 1]
原因:插件不在maven配置文件settings.xml中pluginGroups的白名单里面
解决方案:修改maven的settings.xml配置文件,在<pluginGroups>节点中添加
<pluginGroup>com.spotify</pluginGroup>
- Jenkins中 打包报错:编码GBK的不可映射字符
原因:由于本项目有点老,java类使用的编码是GBK,Maven打包时使用的是UTF-8,反复调整拉取、编译编码都不行。
解决方案:把java类文件编码改为UTF-8,OK了。