zoukankan      html  css  js  c++  java
  • 为已有的web project项目加入maven支持,并使用myeclipse的插件. 悟寰轩

    转自:http://blog.csdn.net/Cooper_Lyt/article/details/5585276

    项目还是之前的项目,现在我要在原有项目中加入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 包的对比。

  • 相关阅读:
    java基础部分的一些有意思的东西。
    antdvue按需加载插件babelpluginimport报错
    阿超的烦恼 javaScript篇
    .NET E F(Entity Framework)框架 DataBase First 和 Code First 简单用法。
    JQuery获得input ID相同但是type不同的方法
    gridview的删除,修改,数据绑定处理
    jgGrid数据格式
    Cannot read configuration file due to insufficient permissions
    Invoke action which type of result is JsonResult on controller from view using Ajax or geJSon
    Entity model数据库连接
  • 原文地址:https://www.cnblogs.com/sunxucool/p/3012501.html
Copyright © 2011-2022 走看看