什么是Maven?
Maven 是一个强大的项目管理和构建自动化工具,在Java开发中,一个项目通常会依赖许多外部的库,比如开发一个Web应用可能需要依赖Servlet APL,Spring框架等,和需要引入大量的Jar包。往往一个Jar包又能引用其他Jar包,这样程序员往往会花费较多的精力在引用Jar包上,而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar包,它会帮助我们下载所有的Jar,极大提升开发效率。
Maven项目标准结构
1.依赖管理
Maven通过在项目的pom.xml(Project Object Model,项目对象模型)文件中定义依赖项,能够自动从中央仓库(默认是Maven Central)或其他配置的远程仓库下载这些依赖库,并将它们添加到项目的类路径中。
2.项目构建
Maven定义了一个标准化的项目构建生命周期,包括清理,编译,测试,打包,安装和部署等阶段。当执行mvn clean install命令时,Maven首先会执行清理操作,删除之前构建生成的文件(如编译后的.class文件和打包后的.jar或.war文件等),然后进行编译,将.java文件编译成.class文件。
结合运行测试用例,如果测试通过,就将项目打包成指定的格式(如JAR文件用于Java库项目,WAR文件用于Web应用项目),最后将打包后的文件安装到本地仓库,供其他本地项目作为依赖使用
3.项目结构标准化
Maven强制项目遵循一定的目录结构。典型的Maven项目结构包括
- src/main/java用于存放主要的Java源代码
- src/main/resources用于存放项目的配置文件(如application.properties等)
- src/test/java用于存放测试代码
- src/test/resources用于存放测试相关的配置文件
这种标准化的结构使得开发人员能够更容易地理解和维护项目,同时也方便了各种工具(如集成开发环境)对项目进行解析和操作。
4.创建第一个Maven工程
- Java新建Maven工程
- src下分为了两级目录:main和test
- main下分为两级目录: java和resources
- test下分为一级目录:java
src/main/java目录
是Maven项目存放主要Java源代码的地方,所以构成项目核心功能的Java类都应该放在这个目录下。比如在一个Web应用程序中,用于处理业务逻辑的服务类(如UserService.java用于处理用户相关的业务操作,如用户注册,登录等),数据访问对象类(如UserDao.java用于与数据库交互,执行SQL查询等)都存放在这里。
src/main/resource目录
是用于存放项目的各种配置文件,资源文件,常见的配置文件如application.properties或者application.yml(在Spring Boot项目中用于配置数据库连接,服务器端口等信息),日志配置文件(如log4j.properties)。资源文件可以是一些静态文件,如图片,HTML模板等(在Web应用中可能会用到)。
src/test/java目录
是用于存放单元测试和集成测试等测试代码。对于src/main/java中的UserService.java类,可以在src/test/java中创建UserServiceTest.java类来编写测试用例,使用JUnit等测试框架来验证UserService类中的方法是否按照预期工作,如测试用户注册方法是否能正确地将用户信息保存到数据库中
src/test/resources目录
存放测试相关的资源文件和配置文件。这些文件是为了辅助测试用例的运行而设置的。例如,如果测试用例需要读取一个特定的测试数据文件(如一个包含用户测试数据的CSV文件),或者需要一个特殊的测试配置文件(如用于模拟特定环境的配置文件),就可以将这些文件放在这个目录中。
target目录
是Maven构建项目后生成的文件存放的目录,在这个目录中,会有编译后的字节码文件(如果是Java项目,src/main/java中的.java文件编译后的.class文件存放在target/classes目录下,src/test/java中的测试代码编译后的.class文件存放在target/test-classes目录下),打包后的文件(如JAR文件或WAR文件)等。
pom.xml文件(项目根目录下)这是Maven项目的核心配置文件,它定义了项目的基本信息(如项目名称,版本号,打包方式等),项目的依赖关系,构建配置。
Maven项目标准结构
Maven依赖管理
- Maven利用dependency(依赖)自动下载,管理第三方Jar
- 在pom.xml文件中配置项目依赖的第三方组件
- maven自动将依赖从中央仓库下载至本地仓库,并在工程中引用
- 在pom.xml中配置,增加dependency标签
<dependency><groupld>com.belerweb</groupld><artifactld>pinyin4j</artifactld><version>2.5.5<version>
</dependency>
Groupld:机构或者团体的英文,采用“逆向域名”形式书写
Artifactld:项目名称,说明其用途,例如:cms(内容管理系统),oa(办公自动化模块)...
Version:版本号,一般采用“版本+单词”形式,例如:1.0.0.RELEASE
这三个标签被称为Maven的依赖坐标系,通过Maven坐标系提供的信息我们知道从中央仓库下载的何种厂商的组件和版本
譬如我们的项目经理希望我们开发一个将汉字转化为拼音的程序, 我们可以通过开源中国,GitHub等渠道去搜索能实现该功能的组件,但是我们现在希望利用Maven自动的进行加载,我们应该怎样查询?
打开网址 search.maven.org,搜索pinyin4j组件
在搜索页搜索pinyin4j
选择版本
复制该版本组件的依赖坐标系到pom.xml
如果文本显示红色的话 需要点击下面这个刷新符号进行下载 待文字变黑体验证是否下载成功
如何验证Maven的依赖声明jar包下载成功了呢?如果IDEA界面的左侧出现下面扩展的库则表明下载成功
出现以上的jar包,说明远程下载后被当前工程进行依赖了,在实际项目开发时,依赖管理就是通过Maven中央仓库提供的文本放到pom.xml中,通过刷新加载后自动的进行下载,下载完以后引入当前工程我们便可以使用它。
验证是否能成功使用:
1.新建名为Pinyin的类
import net.sourceforge.pinyin4j.PinyinHelper;
/*** 汉字转拼音*/
public class Pinyin {public static void main(String[] args) {char c = '嘿';//pinyin4j提供的核心类 调用它的静态方法(得到某一个字符的所有拼音)String[] arr = PinyinHelper.toHanyuPinyinStringArray(c);//增强型的for循环遍历字符串数组arr,如果arr不为空,循环会依次取出数组中的每个拼音字符串,输入到控制台中for (String py : arr) {System.out.println(py);}}
}
运行结果 代码中的字符拼音被正确的显示出来
以上操作利用在网页上获取到的pinyin4j组件,将得到的依赖加入到Maven中,实现了一个简单的将汉字转化为拼音的功能。
如果我们将版本号改为2.5.0,重新加载以后,虽然中央仓库有这个版本但是它并没有自动下载,出现这种问题是因为默认的中央仓库是部署在国外
如何解决这个问题呢?我们需要增加国内阿里云提供的Maven镜像仓库,将从访问国外服务器转为
国内直接下载,访问网站maven.aliyun.com阿里巴巴国内Maven镜像仓库,通过国内的服务器提高下载速度。
定位到public公共仓库,复制仓库地址
回到IDEA编译器,将仓库地址复制到pom.xml
然后修改过的版本就能够正常进行下载