标签:
本文主要介绍将 Java 项目转换成 Maven 项目。如果了解 Java 项目与 Maven 项目在结构上的区别,就很容易在他们之间进行转换,而不用局限于各种资料上所描述的方法(有些方法相当不靠谱,照猫画虎,知其然不知其所以然)。本文假设你已经成功安装了 Maven。
我的 Eclipse 版本是 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 为 20150621-1200,Maven 是 3.0。
用 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 项目是什么样的。
用 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"/>注意,classpathentry 的 kind 属性同 Java 项目中的一样,也有“src”、“con”、“output”,但比 Java 项目多,比如,关于 src 的就有两个。但其属性就有区别了,比如,kind 为 src 的 classpathentry,分别有 path=src/main/java 和 path=src/test/java,指示主代码和测试代码的位置。</classpath>
- .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 项目的管理。
首先,文件系统下,在 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>
图 4 Java 项目转换成 Maven 项目
现在,跟 Maven 创建的项目一样了。
了解这个原理,你也能将 Maven 项目转换成 Java 项目。
标签:
原文地址:http://www.cnblogs.com/liuning8023/p/4726822.html