为已有的web project项目加入maven支持

2024-05-25 02:08

本文主要是介绍为已有的web project项目加入maven支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    项目还是之前的项目,现在我要在原有项目中加入maven支持,但是myeclipse只能在建立web project时有选项可以为项目加入maven支持,但我的项目已经生成好久了,所以只能自已动手了。

 

 

 

步骤如下;

 注:我的环境为:myeclipse7.5和maven2.2;myeclipse7.0自带的好像是maven1.*(未查证),所以步骤可能不能,推荐使用maven2

1.修改目录

    先要将目录结构改为maven项目的目录结构做法是:

     A:先将原src重命名为"java",(如果使用svn改完命后要先提交,不然不让建立src目录)

     B:建立"src"目录,在src下建立"main"目录,把重命名的"java"目录拽到"main"下,这时如果"java"变为普通目录,那么把它改为源码目录(右键->build path-> use as source folder)

     C: 把原来的WebRoot目录重命名为"webapp",把它拽到"main"下

     D:建立其它所需目录,src/test/java(源码目录)  ; src/test/resources ; src/main/resources  ;target等.

    由于改变了目录所以现在项目已经无法再用原来的方法部署了,现在做下一部改下目录的设置让项目可以用原方法部署

2.将 webapp设置WebRoot目录

    到工作目录你的项目下的.mymetadata(隐藏)文件中的<attribute name="webrootdir" value="WebRoot" /> 改为

   <attribute name="webrootdir" value="/src/main/webapp " />

    修改项目下的.classpath文件 中的 源码输出路径为: <classpathentry kind="src" output="src/main/webapp/WEB-INF/classes " path="src/main/java"/> 修改 主输出路径为:<classpathentry kind="output" path="src/main/webapp/WEB-INF/classes" />

     重启eclipse,现在又可以以原来的方法部署项目了。

3.建立pom.xml文件和对相关框架的依赖

    新建一个web project项目并让为它添加maven支持,然后再这个项目中加入你所使用的框架支持如:hibernate,spring,jsf等所有你需要并myEclipse可以提供的支持(这个过程可能要等一段时间,因为maven会自动到主镜像站下载所需的jar包和pom文件到本地库),这时MyEclipse会为你在pom中加入你所需要的依赖关系。把这个pom.xml 文件拷到你的项目根目录并修改groupId和artifactId为你的项目的名子,现在在为项目加入一个maven的Build配置,让MyEclipse认为这个项目是一个Maven项目,修改项目下的.project文件 :

buildSpec小节 加入 :

        <buildCommand>
            <name>org.maven.ide.eclipse.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>

natures小节中加入

        <nature>org.maven.ide.eclipse.maven2Nature</nature>

   重启Eclipse,发现现在项目文件夹上已经有一个M图标了,说明Eclipse已经认为这是一个Maven项目了

   注:为了能使项目还能以原来的方法部署现在暂时不要删除原来引用jar的的Build path,在最后再删除它们

4.加入其它jar包的依赖

   现在的pom.xml文件已经有了我们所需框架的jap依赖定义了,但是你可能和我一样有一些其它jar包的依赖要把它加入到pom.xml文件,做法如下:先到maven的库查询网站去查找你所需的jar文件(注意版本),如果找到直接把它加入到你的pom.xml文件中,如:

        <dependency>
            <groupId>mx4j</groupId>
            <artifactId>mx4j</artifactId>
            <version>3.0.1</version>
        </dependency>

这时maven会自动到maven库中去下载这个jar和这个jar所依赖的jar ,注意在你的maven更新过程中可能出现存在循环依赖的提示,这是因为你所加入的其它包中已经通过依赖关系加入了这个jar包,而你又手到加入了这个包,所以你只要放心的把你手动加入的依赖包定义删除就行了。由于Maven会自动加入包的依赖关系,所以很可能会造成包的冲突,遇到最多的应该是hibernate的asm包冲突,这时你可以定义一下要求hibernate不下载指定的依赖jar,像这样:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>3.2.5.ga</version>
            <exclusions>
                <exclusion>
                    <groupId>asm</groupId>
                    <artifactId>asm</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>asm</groupId>
                    <artifactId>asm-attrs</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>cglib</groupId>
                    <artifactId>cglib</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

另外我还遇到了xfire的spring1.2和我使用的spring2.0冲突

        <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-spring</artifactId>
            <version>1.2.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-mock</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

现在已经为项目加入了maven远程库中已有的jar支持了,但是有可能像我一样还需要一些在maven远程库中不存在的jar,像这样的问题有两个解决办法一种是在公司内部自已架一个maven库,这种做法很费力,但如果你的公司很大,并且有很多maven项目的话,用这种方法就比较实用和方便的,我用的是第二种方法,直接把所需的jar加入到本地库上,并在pom中引用,方法如下:

A:你要先下载一个maven装到你的机器中(不知道怎样直接使用MyEclipse的maven),装好后在命令行运行mvn -v  如果正确反回则安装成功(安装很简单,解压后设下环境变量就行了,一个是M2_HOME,并把你的%M2_HOME%/bin加入到path中,另外确保你有JAVA_HOME的环境变量)

B:运行mvn命令将jar加入到本地库,这是我加入一个shark包的命令如下:

mvn install:install-file -Dfile=sharkcaching-lru.jar -DgroupId=com.dgsoft.extend -DartifactId=sharkcaching-lru -Dversion=2.2.1 -Dpackaging=jar

注意修改为你的。参数依次为:jar文件名,组织名,定义名,版本,类型。

C:把你加入的jar定义到pom.xml,针对上面的有如下定义:

        <dependency>
            <groupId>com.dgsoft.extend</groupId>
            <artifactId>sharkcaching-lru</artifactId>
            <version>2.2.1</version>
        </dependency>

D:如果你也和我一样有很多这样的包,那么和以写一个.bat文件(我在linux下是.sh),方便以后加入,另外我还用DELPHI写了一个自动查找文件夹下的*.jar文件并自动生成安装jar到本地库的bat(或sh)文件和pom.xml文件的小程序,如果有需要可以给我留言,我可以传上来。

现在万事俱备,只欠东风了,下面做最后一步

5.修改项目的包引用为pom.xml所设置的依赖。

现在我们可以把原来项目的包引用改成使用maven的依赖库了,做法很简单,修改你项目的.classpath配置文件,把原来的包引用全部删除,并加入maven的依赖引用,我的.classpath文件最后是这样的,发出来为大家做参考

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="src/main/webapp/WEB-INF/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
    <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> 
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
    <classpathentry kind="output" path="src/main/webapp/WEB-INF/classes"/>
</classpath>

 

因为我使用的是javaee5项目,所以黑色加粗部分的配置你的可能和我的不一样

重启Eclipse ,在项目上右键->properties->java build path->order and Export 中的 Maven Dependencies中的勾打上。

现在项目上即可以用原来的方式部署,调试,也可以使用maven的构建、测试等Maven功能了。

 

 

最后说下我在过程中遇到的问题,你可能遇不到,也可能遇到:

1.Maven依赖包冲突,前面说过了。

2.修改pom.xml的依赖包后,eclipse对maven包的引用并不刷新,这可能是Myeclipse7.5的一个bug, 我在试用8.5时好像就没这个问题了,解决方法是在修改了pom.xml的依赖后,在项目上右键-> Maven4MyEclipse->运行一下Enable Nested Modules或Disable Nested Modules就会刷新MyEclipse的Maven Dependencies引用了。

3.xfire的jaxb-api的jar包和jdk1.6的rt.jar冲突,这个问题很怪,虽然Eclipse提示代码错误,但是我把项目部署到jdk1.6的服务器上,这部分功能还是好使的。但是eclipse提示错误看起来还是很不爽的。要解决这个问题你需要一个1.5的jdk,但是我在.classpath中已经配置了使用1.5的jdk了,但是eclipse还使用1.6的jdk呢,因为你的eclipse并不知道jdk1.5的存在,只要在你的eclipse设置的jres中查找到1.5的jdk后项目就会自动使用1.5的jdk引用做为build path了(注:不用将jdk1.5设为默认jdk)。

4.javaee相关包不存在或冲突:

不存在的原因是你的pom.xm中的依赖设置中使用了provided定义生存周期,这个设置是认为在环境中已经存在这个包了所以就不再部署了,只要改一下生存周期就行了,冲突也是一样的(一般是openejb的javaee-api和tomcat的javaeeapi冲突),只要加上这个关键字就行了。我的javaee部分配置最后如下:

        <!-- java EE 5 -->
        <dependency>
            <groupId>org.apache.openejb</groupId>
            <artifactId>javaee-api</artifactId>
            <version>5.0-1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>1.2_04</version>
        </dependency>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>1.2_04</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>

 

5.其它问题,主要是包的依赖和冲突等问题比较多,描述起来不太容易,有些我也记不太清楚了,而且和我的项目有关别人遇到的机会不大就不在此描述了。

 

做此操作遇到最多问题的地方就是依赖jar包的问题,所以在最好将最后一步操作(移除旧引用)尽可能延后,这样可以方便新旧jar 包的对比。

转载地址:http://blog.csdn.net/Cooper_Lyt/archive/2010/05/13/5585276.aspx

这篇关于为已有的web project项目加入maven支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000180

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用maven依赖详解

《使用maven依赖详解》本文主要介绍了Maven的基础知识,包括Maven的简介、仓库类型、常用命令、场景举例、指令总结、依赖范围、settings.xml说明等,同时,还详细讲解了Maven依赖的... 目录1. maven基础1.1 简介1.2 仓库类型1.3 常用命令1.4 场景举例1.5 指令总结

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://