码迷,mamicode.com
首页 > 编程语言 > 详细

Java 项目转换成 Maven 项目

时间:2015-08-13 13:55:29      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

本文内容

  • Java 项目
  • Maven 项目
  • Java 项目转换成 Maven 项目

本文主要介绍将 Java 项目转换成 Maven 项目。如果了解 Java 项目与 Maven 项目在结构上的区别,就很容易在他们之间进行转换,而不用局限于各种资料上所描述的方法(有些方法相当不靠谱,照猫画虎,知其然不知其所以然)。本文假设你已经成功安装了 Maven。

我的 Eclipse 版本是 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 为 20150621-1200,Maven 是 3.0。

Java 项目


用 Eclipse 创建一个 Java 项目,选择“File –> New-> Jave Project”,新建名为“JavaDemo”的项目。

文件系统目录结构如下图所示,之所以强调文件系统,是为了区分项目在 Eclipse 中的目录结构:

技术分享技术分享

图 1 Java 项目在文件系统和 Eclipse 中的结构

说明:

  • src 目录,是源代码目录;
  • .classpath 文件,用来描述程序编译的 classpath。比如,上面建立的 Java 项目,该文件的可能内容是:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

指定了源文件的位置为 src 目录;con 容器为 JRE,标准 VM(虚拟机),Java 8 等信息;编译输出位置为 bin 目录。当然,还可以有 lib 目录的相关信息。如果该项目引用了其他项目,也会在这里。你可以想象,该文件事实上指定了 Java 项目在逻辑结构与文件系统的物理结构之间的对应关系。

  • .project 文件,是项目文件,比如,还是上面项目,该文件的可能内容是:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>JavaDemo</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

指定了项目名称 JavaDemo,项目描述信息,生成命令,核心等信息。

接下来,再看看 Maven 项目是什么样的。

Maven 项目


用 Eclipse 新建一个 Maven 项目,选择“File –> New-> Other”,找到“Maven –> Maven Project”,Archetype 选择“quickstart”,Group ID 和 Artifact Id 都为 mavenDemo,

技术分享 技术分享

图 2 Maven 项目在文件系统与 Eclipse 中的结构

说明:

  • 上图左边,Maven 项目比 Java 项目多了 pom.xml,即 Project Object Model,该文件本文就不介绍了;

上图右边,Eclipse 的内容变化就比较多了,甚至连项目图标都变了,右上角有个“J”,左上角多个“M”,包括:

  • 源文件位置,Java 项目只有 src,而 Maven 在 src 下又区分了 main 和 test,其中 main 是主代码,test 是测试代码,显示样式也有变化,如 src/main/java。如果你看下 Maven 的文件系统结构,其实它们都是文件夹。你可以想象,当我们修改代码后,可以让 Maven 进行测试,测试完成后,生成 Jar 包,而 Jar 包中不包含测试代码。这就是如此划分的好处;
  • target 目录,跟 Java 项目的 bin 目录对应;
  • Maven Dependencies,Java 项目有 lib 目录,放置三方 Jar 包,当采用 Maven 时,lib 目录就没用了,因为,Maven 的主要作用是管理项目依赖,它可以从本地仓库或远程仓库获得你需要的 Jar 包,只需在 pom.xml 添加依赖即可;
  • .classpath 文件,跟 Java 项目区别不大,但内容会不同,比如,上面新建的 Maven 项目,该文件的可能内容是:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
注意,classpathentry 的 kind 属性同 Java 项目中的一样,也有“src”、“con”、“output”,但比 Java 项目多,比如,关于 src 的就有两个。但其属性就有区别了,比如,kind 为 src 的 classpathentry,分别有 path=src/main/java 和 path=src/test/java,指示主代码和测试代码的位置。 
  • .project 文件,比如,还是上面 Maven 项目,该文件的可能内容是:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>mavenDemo</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

Maven 的 .project 文件,除了有关于 Java 的,还添加了它自己的。

本质上,Maven 接管了 Java 项目的管理。

Java 项目转换 Maven 项目


首先,文件系统下,在 JavaDemo 的 src 目录下创建 main 和 test 子目录,并在它们下面再分别创建 java 子目录。

然后,右键选择 JavaDemo,选择“Configure –> Convert to Maven Project”, Group ID 和 Artifact Id 都为 JavaDemo。如图 3 所示:

技术分享

图 3 Java 项目编程 Maven 项目

可以看到,项目图标变了,又多个 pom.xml,Maven Dependencies,target 等。但 src 代码位置不对,没有指示出主代码和测试代码。

希望你还有印象,前面两节,对 Java 项目和 Maven 项目的 .classpath 文件进行的比较。

因此,IDE 在转换时并没有自动修改 .classpath 文件。而你只需在文件系统,src 下,建立 main 和 test 子目录,并在它们下再分别建立 java 子目录。然后修改 .classpath 文件,或用一个线程 Maven .classpath 文件覆盖它即可。

将:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

改成:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
此时,JavaDemo 这个项目就会变成如图 4 所示。

技术分享

图 4 Java 项目转换成 Maven 项目

现在,跟 Maven 创建的项目一样了。

了解这个原理,你也能将 Maven 项目转换成 Java 项目。

Java 项目转换成 Maven 项目

标签:

原文地址:http://www.cnblogs.com/liuning8023/p/4726822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!