如何将 Java 项目转换成 Maven 项目

article/2025/8/14 9:24:27

亲测可用,若有疑问请私信

本文内容

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

本文主要介绍如何将 Java 项目转换成 Maven 项目。首先要明确的是,用 Maven 管理 Java 项目的确方便。它带给你直观的方便是:你不用在网上找 Jar 包,然后把它复制到 lib 目录,再在项目中引用它。而只需向 pom.xml 写入你需要的 Jar 包依赖,Maven 就能自动从本地仓库或远程仓库下载,并引用……

如何将一般的 Java 项目转换成 Maven 项目?当你了解了 Java 项目与 Maven 项目在结构上的区别后,就能很容易地在它们之间进行转换,而不用局限于各种网络或书上的资料上所描述的方法(有些方法相当不靠谱,照猫画虎,知其然不知其所以然)。

本文假设你已经成功安装了 Maven。

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

Java 项目


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

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

2015-08-13_095755

2015-08-13_100011

图 1 左:Java 项目在文件系统中的结构;右: 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,

2015-08-13_102951

2015-08-13_102858

图 2 左:Maven 项目在文件系统中的结构;右: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 包,即便是你自己写的 Java 项目,也完全不用再配置“Configure Build Path”,只需向 pom.xml 添加 dependency 节点,写上你引用项目的 Group Id 和 Artfact Id,就能直接引用。想象一下,如果没有 Maven,当你使用三方 Jar 包时,通常会先建立一个 lib 目录,然后把 Jar 包复制到这里,再通过“Configure Build Path” 引用它们,有了 Maven 后,这些步骤,就统统不用了(差点忘了,你还得在网上找到你需要的 Jar 包,并下载本地);
  • .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,选择“Configure –> Convert to Maven Project”, 填写“Group ID”和“Artifact Id”都为“JavaDemo”。如图 3 所示:

2015-08-13_113514

图 3 Java 项目编程 Maven 项目

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

希望你还有印象,前面两小节,对 Java 项目和 Maven 项目的 .classpath 文件进行的比较。因此,IDE 在转换时没有自动修改 .classpath 文件。

而你只需在文件系统下,在 src 目录下建立 main 和 test 子目录,并在它们下再分别建立 java 子目录。也就是,src/main/java,src/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 所示,如果你着急,就按 F5 刷新。

2015-08-13_114418

图 4 Java 项目转换成 Maven 项目

现在,这个 Java 项目就跟 Maven 创建的项目一样了。

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

另外,你会发现 Eclipse 这个 IDE 一个方便的地方是,即便 Eclipse 已经打开了你的项目,你也可以在操作系统的资源管理器上随意操作文件和文件夹(当然,我说的是 Windows 操作系统),这跟一些其他的 IDE 不同,比如微软的 VS,你就不能这么干,原因很简单,对一个 IDE 正在访问的文件,又在操作系统的资源管理里对文件进行剪切或删除,IDE 显然不会答应。但是 Eclipse 就跟 Notepad 或 UE 这些文本编辑器似的,会监视文件,但不会阻止你做你想做的事,给程序员最大的灵活度和自由度,这也是 Java 的理念之一。所以,在 Maven 项目与 Java 项目进行转换成,无所谓先进行哪步,后进行哪步,如图 3,项目中有 pom.xml 文件了,即便 .classpath 文件不正确,那么这个项目的图标也会已变成 Maven 图标,之前的 bin 目录或 lib 目录也会存在,虽然 Maven 完全不需要它们,而且主代码和测试代码的显示也完全不对,甚至,还会出现完全按操作系统的一级又一级……的目录结构来显示,而不是逻辑结构——Java 包的方式来显示~如果最终所有的修改达到 Maven的要求,它就能正确显示结构。


http://chatgpt.dhexx.cn/article/56Za01PD.shtml

相关文章

Java项目获取路径方法

Java项目中根据相对路径和绝对路径获取文件的方法&#xff08;重要&#xff09; 首先&#xff0c;项目中文件分布情况如下&#xff0c;innerFile.txt位于test.test包下&#xff0c;innerInnerFile.txt位于test.test.inner包下&#xff0c;outterFile.txt位于包的根目录下&…

Java-银行项目

该项目用了三个类Customer,CustomerList,CustomerView。 Customer为实体对象&#xff0c;用来封装用户信息。相当于model。 CustomerList为Customer对象的管理模块&#xff0c;内部用数组管理Customer对象&#xff0c;并提供相应的添加&#xff0c;修改&#xff0c;删除和遍历…

MATLAB箱线图

MATLAB笔记之 作图 箱线图 1、峰值偏度检验 2、相关性作图 MATLAB分析数据相关性实例 3、箱线图看离散程度 如何使用matlab软件进行峰度-偏度检验https://jingyan.baidu.com/article/380abd0ab6f1c75d90192cee.html Matlab图解峰度kurtosis与偏度skewness 原1 Matlab图解峰度…

MATLAB运算符

1. MATLAB运算符 1.1 算术运算符 算术运算符运算法则算术运算符运算法则ABA与B相加(A、B为数值或矩阵)A-BA与B相减(A、B为数值或矩阵)A*BA与B相乘(A、B为数值或矩阵)A.*BA与B相应元素相乘(A、B为相同维度的矩阵)A/BA与B相除(A、B为数值或矩阵)A./BA与B相应元素相除(A、B为相同…

matlab subs函数

在matlab命令行查看subs函数的帮助 subs函数一共有三种使用方法&#xff1a; subs(s,old,new) subs(s,new) subs(s) 点击 subs 的参考页可以看到下面的详细说明: 第一种使用方法 说明&#xff1a;subs函数返回 函数s 的一个拷贝&#xff0c;s函数中的所有old变量都会替换为…

Matlab fprintf

fopen 文件访问类型 仅供学习记录 clc clear %% 01换行输出结果 fprintf([...\n...Matlab可以实现输出换行显示 \n...把你想要输出的内容换行写在[]中 \n...用换行符实现换行 \n...效果就是这样的 \n...]) %% …

数学建模与MATLAB计算之006.MATLAB中的条件语句

006.MATLAB中的条件语句 文章目录 006.MATLAB中的条件语句一、单分支if条件语句二、双分支if条件语句三、多分支if条件语句四、switch语句五、try语句 选择结构是根据给定的条件成立或不成立&#xff0c;分别执行不同的语句。 MATLAB 用于实现选择结构的语句有** if语句、swit…

matlab源码说明

目录 1.MATLAB概述 2.MATLAB程序使用几个常规注意实现 2.1.运行过程可能出现Out of Memory的问题解决办法 2.2.保存大于2G的数据 2.3.程序运行方法 1.MATLAB概述 Matlab经过不断的发展和完善,如今已成为覆盖多个学科,是具有超强数值计算能力和仿真分析能力的软件。…

Matlab逻辑运算符/与/或/非/异或/all/any

Logical()是非0则1&#xff0c;如果数字是非零&#xff0c;输出为1&#xff0c;数字为零&#xff0c;输出为0 与或非 与&#xff1a;&&#xff0c;有0则0&#xff0c;全1则1 或&#xff1a;|&#xff0c;有1则1&#xff0c;全0则0 非&#xff1a;~&#xff0c;0变1&#…

转行学计算机测试,转行软件测试后悔了

原标题&#xff1a;转行软件测试后悔了 很多时候&#xff0c;都在想当初做的转行软件测试行业的决定是对的吗&#xff1f;现在后悔还来得及吗&#xff1f; 其实我刚参加织雀教育的培训班一个月&#xff0c;各方面都学起来感觉有难度&#xff0c;毕竟是零基础转行的&#xff0c;…

【小结】南京大学软件工程专硕2021二战小结

今年的考研也告一段落了&#xff0c;从导师那里听到了一些风声&#xff0c;应该是可以上岸了&#xff0c;上班划水&#xff0c;没啥事&#xff0c;总结一下两年的混子生活吧。拟录取出来就公开。&#xff08;三百多分也舔着个脸写经验贴&#xff09; 逻辑很差、文笔稀碎、错别…

嵌入式软件工程师_程序人生一名嵌入式软件工程师的成长总结

哈喽,我是老吴。今天分享一篇18年毕业生的总结文。文章于首发于[嵌入式大杂烩] (2019-10-16)。文章里干货多多,各位慢慢品读吧。 一、我的工作经历 1.1 第一家公司 1.2 第二家公司 1.3 第三家公司二、小、中、大公司的特点 2.1 小公司 2.2 中等公司 2.3 大…

2023年双非二战跨考上岸南京大学软件工程842专硕考研初试403分经验贴

&#x1f4a1; 考研过程的中心思想&#xff1a;脚踏实地、少走弯路、不要乱搞 目录 1.前期准备 2.个人情况 3.择校方面 4.备考里程表 5.数学 6.英语 7.政治 8.专业课 9.复试 10.后记 & 致谢 由于有不少朋友都私信我&#xff0c;想要做的笔记&#xff0c;所以我建…

气象学和计算机专业,没毕业就被签走的铁饭碗专业 气象学

有一个专业的就业率很好&#xff0c;到那时人们却不这样认为&#xff0c;是哪个专业呢&#xff1f; 气象学 每每一说到这个专业的就业好&#xff0c;都有很多人来反对。他怎么能好呢&#xff1f;我也没看见身边有人做气象这个行业的啊、 其实气象学的就业率是非常的高的&#x…

软件工程课程的第一次作业

软件工程课程第一次作业 1、建立一个public代码仓库1.1获取秘钥1.2 创建代码仓库1.2.1仓库地址 2、评估当前的自己2.1个人简介2.2当前值 3、展望未来3.1 回答关于构建之法的问题 4、学习路线 这个作业属于哪个课程广工软件工程课程学习社区作业要求作业链接作业目标创建博客、学…

从物理到软件工程,中山大学转专业2017纪实

我的转专业历程 其实早就有想写几篇文章纪念在中大的这一年,也确实写过一篇,但是还是太懒没能坚持下去,在知乎上获得的成就感也不是很高。正好借这个机会写出来当作能够在未来唤起一点点回忆的东西吧。 还是把原来最后面的联系方式摆在上面比较好 qq:715817451 还依稀记得…

软件工程专业困局

点击上方“开源社”关注我们 | 作者&#xff1a;tisonkun | 转载自&#xff1a;野田之书 | 编辑&#xff1a;刘雪洁 | 设计&#xff1a;朱亿钦 | 责编&#xff1a;王玥敏 让我们先看两段材料。 第一段出自《软件困局》[1]一书中文版译序。 软件专业的学生并没有学到在团队中如何…

软件工程专业学生的自我反思

迷茫时的反思 我现在是一名大三的学生&#xff0c;有时候还是会处在一种很迷茫的状态&#xff0c;这种状态体现在&#xff1a;自己会不自觉的打开王者荣耀&#xff0c;打开BiliBili刷视频&#xff0c;熬夜看剧&#xff0c;慢慢地陷入一个漩涡&#xff0c;越陷越深...... 你是否…

女孩学计算机软件工程,女生学软件工程好吗 就业方向有哪些

软件工程是一个很热门的专业&#xff0c;男生学该专业的人数比较多&#xff0c;但是不少女生听说软件工程好就业也心动了&#xff0c;那么女生报考软件工程好不好呢&#xff0c;毕业后能做什么工作呢&#xff1f; 女生适合学软件工程专业吗 软件工程专业之所以适合男生去学&…

软件工程专业大学四年学什么

软件工程专业&#xff08;软件开发与数据处理技术方向&#xff09;大学四年学什么&#xff1f; 未完待续&#xff0c;打※部分已更新“期末复习资料、课堂作业、实验报告或课设报告”请读者自行查阅我的博文分组&#xff01; 每届都是“实验性选教材、排课”&#xff0c;you …