java web 项目 转 maven java web 项目(旧项目 转maven)遇到的问题

一个一年前的项目,最近发现了一个问题,在生产环境上,不能发邮件。一看才发现原来 是缺少 jar 包。那导个 jar 包就好了,对吧。

但是在我打包项目的时候。发现,居然 myeclipse 不能导出 jar 包。那些引用的 myeclipse 自带的 jar 包全部不能导出。坑啊。

so,多少个日日夜夜想着的事情,现在就做。搭建一个私服 maven 仓库,把这个项目转成 maven 的。

搭建 maven 私服( 使用 Nexus )
http://blog.csdn.net/zhanlanmg/article/details/45600813

maven 和 nexus 的安装这里不再详述。

过程是这样子的:
.
1. 创建一个 java web 项目 ,启动 maven 支持(eclipse 安装 maven 插件后创建时有选项,插件自己装)。
.
2. 在搭建自己的 maven 仓库 (这个很简单,看教程就好了,另外 注意 一定要 开启 索引服务,这样方便下一步查找需要的 jar 包的 pom 引用)
.
3. 第 2 步要下载的文件,大约有 1.5 GB。等待是一个很漫长的过程,可以做点别的事情。下载完成后,在 nexus 里面搜索就能看到想要的 jar 包的信息。按旧项目中使用的 jar 包,查找,并加入到 pom.xml 中。
.
4. 修改用户名下 .m2 文件夹中的 settings.xml 文件,设置 maven 从本地 nexus 下载 jar 包。
在 settings.xml 中找到 mirrors 在里面添加如下内容 其中 mirrorOf * 代表所有请求都去这个仓库(暂时不需要复杂的配置)

<mirror>
        <id>my.nexus</id>
        <mirrorOf>*</mirrorOf>
        <name>my.nexus</name>
        <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>

.
5. maven 编译项目, mvn clean install 就足够了,在 eclipse 中右击项目 run –> maven Builder 输入 clean install 即可。这个时候会去仓库下载 jar 包,而本地仓库现在没有,会去代理仓库(中央仓库)下载,这可能会是一个非常慢的过程,受网速等限制(注:下载很慢,失败的时候会报错,再开始一次,一次,一次,直到全部下载完成,这也是需要 maven 私服的原因)。
这里有几个公共仓库,供参考。
maven公共仓库
http://blog.csdn.net/zhanlanmg/article/details/45600835
.
6. 第 5 步编译没有问题后,就把所有旧项目中的 java 源码,都放到 maven 工程的源码目录(这个是自己设置的,在项目 –> 属性 –> java builder path –> Source ),再把原来的 webroot 下的所有文件都放在 maven 项目的 src –> main –> webapp 下(这是 maven 的项目结构)。
.
7. 同第 5 步,现在编译完整项目,我有遇到一个问题
ImageUtils.java:[1,0] 错误: 非法字符: \65279
这个只会在项目源码是 utf-8 时出现,因为前面出现了 BOM 标记,所以会出现这个问题,需要用其它编辑器把这个东西去掉。或者用 maven 编译完 资源文件后,再用 project –> build 编译 java 代码 也是可以的。
.
8. 在第 2 步选择 jar 包的时候一定要注意 jar 包的版本,因为不同的版本可能会出现各种问题,最好是按照原项目的版本选择。比如 我原项目 是 hibernate-core 3.3.0, 而我在新项目中使用了 3.5.6(不要为了用高版本而用高版本), 就出现了 Caused by: java.lang.NoSuchFieldError: ALIAS_TO_ENTITY_MAP 换回 3.3.0 就没有问题。
.
9. jar 包冲突问题。
遇到这样的现象,发邮件时 出现 java.lang.UnsupportedOperationException: Method not yet implemente
这个是由于 jar 包 mail-1.5.0-b01.jar 和 geronimo-spec-javamail-1.3.1-rc3.jar 冲突,而 mail-1.5.0-b01.jar 是我需要的,geronimo-spec-javamail-1.3.1-rc3.jar 是我不需要的。
解决:在项目中运行 mvn dependency:tree ,可以看到 maven 生成的依赖树。如下片段:

[INFO] +- com.cloudhopper.proxool:proxool:jar:0.9.1:compile
[INFO] |  \- avalon-framework:avalon-framework-api:jar:4.3:compile
[INFO] |     \- avalon-logkit:avalon-logkit:jar:2.1:compile
[INFO] |        +- geronimo-spec:geronimo-spec-javamail:jar:1.3.1-rc3:compile
[INFO] |        \- geronimo-spec:geronimo-spec-jms:jar:1.1-rc4:compile

这个 jar 包是由于我使用了一个数据库连接池而引入的。
不需要它们两个,需要在 pom.xml 中引入 proxool 的引用中加上 excluded 标签,如下:

<dependency>
<groupId>com.cloudhopper.proxool</groupId>
    <artifactId>proxool</artifactId>
    <version>0.9.1</version>
    <!-- 这个就是我们要排除依赖包,解决jar包冲突 -->
    <exclusions>
            <exclusion>
                    <groupId>geronimo-spec</groupId>
                    <artifactId>geronimo-spec-javamail</artifactId>
            </exclusion>
            <exclusion>
                    <groupId>geronimo-spec</groupId>
                    <artifactId>geronimo-spec-jms</artifactId>
            </exclusion>
    </exclusions>
</dependency>

这样即可解决冲突。

以上是遇到的一些问题,希望能够解决一些人的一些问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值