Maven学习笔记
文章目录
1.统一项目开发结构
java项目:
---|
--src
------main
--------|____java
--------|____resources
------test
--------|____java
--------|____resources
javaweb项目:
---|
--src
------main
--------|____java
--------|____resources
--------|____webapp
----------------|____WEB-INF
------test
--------|____java
--------|____resources
2.坐标
一用于描述资源在仓库中的位置
Maven坐标主要构成:
groupid:定义当前maven项目隶属组织名称,通常是域名反写。
artifaceid:定义当前项目名称,通常是模块名称
version:定义当前项目版本号
packaging:定义项目打包方式,一般项目源码打包为jar,web项目为war.
3.仓库配置
maven启动后,默认会保存本地的仓库到以下位置:
user.home/.m2/repository下,
由于国外仓库的资源下载较慢,建议将阿里云的中心仓库镜像地址添加到本地仓库中,选择本地仓库目录下的conf文件夹下的settings.xml文件中mirrors的位置加入以下代码并保存文件
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
4.创建maven文件(IDEA)
配置
在IDEA中,按照下面选项依次打开:Project Structure -> Project Settings -> Modules -> + -> New Module -> Maven -> …quickstart(java)/…22webapp(web) -> Next -> 填写项目组织与项目名称 -> finish,最后将src目录下的文件夹标记为源码文件,源码资源文件,测试文件,测试资源文件等。
配置完后,右角的maven project方便项目的配置与运行(及其方便与重要).
5.tomcat插件安装与项目启动
在maven插件库网站:mvnrepository.com中搜索插件(好像不太管用,建议使用该网址:点我直达),然后复制相关的信息在pom.xml文件中,在project中添加build代码块:
<build>
<plugins>
<plugin>
<!-- dd plugin 1 -->a
<!-- 下面的信息都是你在网站上粘贴的 -->
<groupID>..
<artifaceID>..
<version>..
</plugin>
<plugin>
<!-- add plugin 2 -->
</plugin>
..
<plugin>
<!-- add plugin n -->
</plugin>
</plugins>
</build>
之后点击maven project的刷新进行下载添加
如果是tomcat插件,还可以修改端口与路径,在plugin中这样添加修改:
<plugin>
<!-- dd plugin 1 -->a
<!-- 下面的信息都是你在网站上粘贴的 -->
<groupID>..
<artifaceID>..
<version>..
<configuration>
<port>80
<path>/
</plugin>
说明一下pom.xml文件相关的内容:
packaging:打包方式,Java工程为jar,web工程为war
groupID:组织ID
artifaceID:项目ID
version:版本
dependencies:依赖,在其下使用dependency写各个项目的依赖,形式为:
<dependencies>
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
</dependency>
</dependencies>
6.依赖配置与依赖传递
假设存在两个项目:项目1和项目2,项目1需要依赖项目2,则把项目2的组织项目版本信息复制到项目1的dependency中并进行maven project刷新。
当项目2想对项目1隐藏依赖时,则在项目的依赖中这样添加修改:
<dependencies>
..
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
optional:true
</dependency>
..
</dependencies>
如果项目1不想使用项目2的依赖,可以使用排出依赖,在项目1的pom.xml文件中可以这样添加修改:
<dependencies>
..
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
exclusions
exclusion
groupID:组织ID
artifaceID:项目ID
version:版本(不写版本全部排除)
</dependency>
..
</dependencies>
7.依赖范围
<dependencies>
..
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
scope:test/compile/runtime/provided/system
</dependency>
..
</dependencies>
8.生命周期与插件
maven-source-plugin:源码插件,可以将项目进行打包,在官网进行搜索,并将信息在build进行粘贴
然后在配置中这样修改:
<build>
<plugins>
<plugin>
<groupID>..
<artifaceID>..
<version>..
<exections>
<exection>
<exections>
<goals>
<goal>jar
phase:gene...
</plugin>
</plugins>
</build>
9.分模块开发(高级)
为了减少代码的开发难度,分解表耦合,我们在开发时将采用分包开发,即将于原来的某一个模块拆成一个小项目,示例如下:
原项目:
Spring ssm
---|
--src
------main
--------|____java
---------------|____controller(package)
---------------|____dao(package)
---------------|____service(package)
--------|____resources
--------|____webapp
----------------|____WEB-INF
------test
--------|____java
--------|____resources
pom.xml
Spring ssm.iml
拆分后:
<!-- 项目1 -->
ssm
---|
--pom.xml
--ssm.iml
<!-- 项目2 -->
ssm controller
---|
--src.xml
--pom.xml
--ssm controller.iml
<!-- 项目3 -->
ssm dao
---|
--src.xml
--pom.xml
--ssm dao.iml
<!-- 项目4 -->
ssm service
---|
--src.xml
--pom.xml
--ssm service.iml
拆分时,maven什么模版不用选,复制原工程相关的文件以及pom.xml等相关配置,在maven project可以使用compile通过就OK,import 错误原因为dependency依赖没有导入,如果导入后依旧报错没有找到,说明在本地仓库中没有,需要使用install命令重新在本地仓库安装一下
10.聚合(聚合)
由于模块的层级依赖,如果处在非顶级的某一模块依赖进行更新,其上次的模块由于兼容性问题则不能正常工作时,便会增加维护成本,为了解决这种问题,我们新建一个文件去管理这些模块依赖,这种方式为聚合
在9中的项目1:
<!-- 项目1 -->
ssm
---|
--pom.xml
--ssm.iml
可以看到它并没有代码,因为他要负责管理上述的2,3,4项目,其中在pom.xml文件中这样添加修改:
<project>
<groupID>..
<artifaceID>..
<version>..
<!-- 声明这个文件用于管理 -->
<packaging>pom
<modules>
<Module>项目3路径 ../ssm controller
<Module>项目2路径
<Module>项目4路径
..
</project>
如果工程packaging不写,默认jar包,但是聚合工程需要时pom
11.继承(高级)
在开发过程中,不同的开发项目在依赖其他项目时,对于依赖的同一款插件可能由于插件版本不统一,导致兼容性与功能出现问题,为了有效解决这一问题,我们通过建立新文件,让所有的项目继承该文件,在项目中去掉版本信息,在新建文件中添加版本信息,使所有依赖的项目的插件的版本进行整合统一。
在ssm 的pom.xml 文件这样添加修改:
<project>
<groupID>..
<artifaceID>..
<version>..
<!-- 声明这个文件用于管理 -->
<packaging>pom
<modules>
<Module>项目3路径 ../ssm controller
<Module>项目2路径
<Module>项目4路径
..
<dependencyManagement>
<depenndencies>
<!--添加所有依赖-->
..
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
</dependency>
..
</project>
在子项目的pom.xml文件中定义父工程,去引用依赖,在每个子工程的pom.xml文件中这样进行添加修改:
<project>
<parent>
<groupID>..
<artifaceID>ssm
<version>.
<relativePath>../pom.xml(引用父项目的pom文件的目录)
<packaging>jar
<groupID>..
<artifaceID>..
<version>..
<depenndencies>
<!--添加所有依赖-->
..
<dependency>
groupID:组织ID
artifaceID:项目ID
version:版本
</dependency>
..
</project>
统一版本信息在管理项目中存在版本信息,则在子项目删除版本信息,这样便于依赖的版本同步。
同样pluginManagement也可以进行管理,管理方法同依赖方法
12.属性(高级)
自定义属性,在properties中进行定义,在pom.xml文件的修改如下:
<project>
<groupID>..
<artifaceID>..
<version>..
<!-- 声明这个文件用于管理 -->
<packaging>pom
<properties>
<变量名>info</>
..,
</project>
如果想要进行引用,则这样进行引用:${变量名}
13.版本管理(高级)
一般版本可以这样管理
1.2.3 shapshot
第一位通常是构架改变引起的大版本更新
第二位通常是内容功能模块的改变以及更新
第三位是当前版本的bug改进更新
最后是发行版本说明,snapshot为快照版本,不稳定,release为稳定版本。
14.多项目管理(高级)
将子项目的相关公共信息放在父pom.xml中进行管理,通常子项目的resources目录下的信息使用${变量名}是无法生效的,这涉及到了配置问题,在父级(ssm)的pom.xml文件中这样添加:
<project>
<groupID>..
<artifaceID>..
<version>..
<!-- 声明这个文件用于管理 -->
<packaging>pom
<properties>
<变量名>info</>
..,
<resources>
<resource>
<directory>${project.basedir}子项目的资源文件的文件夹路径
<filtering>true
</project>