- maven的学习和使用
maven的学习和使用
Maven的概念
Maven是什么
- 传统项目中出现的包与包之间的问题
Maven能干什么
使用Maven需要了解的几个知识点
项目的体系结构
项目的概念:处理同一个功能的java文件放在了一起,称之为一个java项目
-
javase阶段。这个阶段我们的项目结构只有一个src文件夹。我们在该文件夹写我们的源码。这个项目的体系结构我们是交由给JDK来进行解析和运行。
-
javaee阶段。也就是javaweb时候,我们的项目结构为src和一个web目录。这个项目的体系结构我们是交由给tomcat来进行解析和运行。
那么我们需要使用maven,而如何创建maven的体系结构呢。
- 实现:使用maven来创建其对应的项目结构。
- 这个时候还有一个问题: 既然是maven的项目结构,例如使用maven创建的是一个web项目,那么maven项目结构当然只有maven自己能够识别。那么我们如何让其能够在tomcat运行呢?
Maven的专业术语
- 本地仓库:也就是存储在本地硬盘中的第三方jar资源的路径地址
- 云仓库: maven如果在本地仓库中没有找到对应的资源,那么则会到云仓库中去下载。
- 资源坐标:maven查找一个第三方资源的定位地址。类似于URL,是唯一的。
- 要不然一个资源坐标找到了2个资源,那么该给我们哪个?
Maven的安装和及配置
下载maven并完成解压
解压后目录如下
配置本地仓库地址(配置的操作均在conf目录下的settings.xml文件中操作)
不配置也行的,配置idea的maven模块时,可以手动重新指定仓库。
放在settings.xml的55行空白处即可
<localRepository>D:/my_dev_tools/apache-maven-3.6.2/resp</localRepository>
配置云仓库地址
放在settings.xml的159行空白处即可
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
配置java的编译版本(虽然编译后是给tomcat看,但是当然要和你tomcat使用的java编译版本一致)
放在settings.xml的219行空白处即可
<profile>
<id>JDK-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
在IDEA中进行对maven的配置
打开设置并找到构建工具,Build Tools,再点击maven
配置maven的目录,配置文件的路径、仓库的路径
pom.xml的几个常见配置内容
dependencies标签,用于引入项目所需的第三方资源(jar)
// 对于需要引入的第三方资源,会先从本地仓库中寻找,如果本地仓库中没有,则会去云仓库中寻找
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
properties 标签,第三方资源版本号管理
plugins标签,用于引入第三方插件
<build>
<plugins>
<plugin>
// 写插件的资源坐标
</plugin>
</plugins>
</build>
Maven项目的创建以及特点
创建jar的项目
- 创建新项目时选择maven项目
-
创建时的注意事项
-
最后点击Finish完成即可
-
项目结构
其中pom.xml是用于给maven看的,maven会解析其中的配置。例如解析其中的资源坐标,然后将资源引入到当前项目
特点
创建war的项目
特点
- 编译后,与javaee的项目体系结构相同。能够被tomcat识别
- 其他的同jar项目的特点
maven创建的war项目搭建基础的web开发环境
- 问题:创建war的项目之后,连jsp都识别不了,并且没有Servlet的jar包,无法完成最基本的web开发。
- 问题出现的原因:以前我们创建javaee项目的时候,会直接引入tomcat的jar包资源,而tomcat的jar包资源就包含识别jsp代码以及Servlet.api等等的jar包。但是我们直接创建的maven项目,并没有默认引入这些jar包。
- 解决:引入servlet、jsp、jstl 的jar包 即可进行最基本的web开发。
<!-- servlet的资源坐标 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- jsp的资源坐标 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!-- jstl的资源坐标 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
war项目的本地启动运行
- 问题:以前我们的javaee项目是在创建的时候就直接使用tomcat进行了部署,然后直接通过tomcat进行运行的。但是现在我们的项目由maven进行创建,虽然打包成war包后可以放入tomcat的webapps目录下直接运行(但是总不能每进行一部分功能代码的开发后都打包放入tomcat运行吧。)。
所以我们在使用IDE进行功能开发时,如何能够运行war项目呢。 - 解决:既然我们之前是使用tomcat部署之后直接运行java项目。那么能不能由maven去网上下来一个tomcat,然后我们使用下载下来的tomcat直接进行项目的运行测试呢? 答案是可以的。
- 实现方案
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!--配置tomcat启动的端口号--> <port>8181</port> <!--配置项目的访问名称--> <path>/myFristMavenProject</path> </configuration> </plugin> </plugins> </build>
更改了项目的pom文件后,会弹出提示,提示是否进行pom文件的更新。
2. 更新后可以在IDE工具中看到当前项目的插件有了tomcat
3. 运行测试
war项目在运行打包时,不会将java根路径下的除了java以外的资源打包问题
例如:mybaits的映射文件,xxx.xml不会被打包的解决方案
解决:在pom.xml的bulid标签下进行资源配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Maven 创建的项目打包到本地仓库
maven项目间的依赖问题
现在我们知道了maven项目如何进行打包,那么打包之后如何被其他项目引用呢?
例如,如上打包的项目,其他项目只需要如下引用即可。(pom.xml中)
<dependency>
<groupId>com.it</groupId>
<artifactId>maven_jar_demo</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
在idea同一个工作空间下的maven项目间的依赖问题
有一个问题,我们如果在idea的同一个工作空间下,创建了多个maven项目,那么项目之间在运行之前可以实现不用打包就能引用。意思就是,项目A在没有进行install打包时,项目B就可以将项目A的依赖加入到自己(B)的项目。
但是呢,实际运行时,还是会提示找不到依赖的,所以请务必不要忘记打包。
Maven项目之间的关系会出现的问题以及解决方案
项目A想要使用到项目B的一个功能问题(聚合关系)
- 通过以上maven的打包我们可以看到,maven的打包单位是针对一个项目,而这个时候项目组A只想要使用到项目B其中很小的一个功能,如果直接引入B现在的全功能的jar包,而很多其他B项目的功能并不会使用到。就会造成资源的浪费。
- 解决思路:在看到spring官方向我们提供的jar包的时候可以看到,spring的每个功能都会分成不同的jar包。那么我们可不可以让maven在打包的时候帮我们把项目按照一个个的功能模块划分来打包呢。
- 实现:maven关系之间有一种关系叫做聚合关系。通过聚合关系就可以解决问题(后面的内容会演示)
聚合关系。指的是一个完整的项目按照功能模块进行了项目划分。例如 entity实体类项目。service业务层项目。mapper持久层项目。util工具类项目。 最后maven打包的时候帮我们进行这些拆分项目的整合(整合后再进行运行)。
项目A和项目B都使用到了相同的dependency依赖(继承关系)
- 问题:2个maven项目,项目A和项目B在开发功能的时候,都引了相同的依赖。造成了代码的冗余。
- 解决:抽取一个公共的maven项目用于做父项目(引入所需的依赖)。项目A和项目B都继承于这个公共的项目。(使用继承关系解决)
一个聚合ssm项目目录结构(解决如上2个问题)
聚合项目的打包,用于运行的项目是jh_web,所以将该项目打包后的war放入tomcat可以直接运行
Maven创建的war项目的手动部署与自动部署到Linux系统当中
手动部署项目
先将maven创建的war项目进行打包install
将打包后的war项目放入linux系统的tomcat的webapps目录下
启动tomcat
通过linux系统的ip和项目名来访问项目
自动部署项目
为什么要自动部署项目:因为我们的项目不可能打包一次之后就不再修改,很可能会进行频繁的修改,那么每次修改打包之后,我们如果都手动打成war包,然后将其放入tomcat的webapps目录下,重启tomcat,那就非常的麻烦了。
Maven之前配置的一个tomcat插件可以帮助我们实现此功能
对项目运行的tomcat的tomcat-user.xml的配置文件进行如下的添加并重启taomcat
# 在没有注释的地方添加如下的代码
<role rolename="manager-gui"/>
<role rolename="manager-script "/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="1234" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
之后需要重启tomcat
配置tomcat,webapps/manager/meta-inf下的context.xml文件,注释掉如下语句
<!-- 该语句是限制访问的,如果不注释掉或者设置成你的ip,则会导致403
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
配置Maven的tomcat插件
<build>
<plugins>
<!-- 让maven去下载一个tomcat来运行当前项目 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://192.168.21.128:8080/manager/text</url>
<!-- 配置用户名密码-->
<username>admin</username>
<password>1234</password>
<charset>utf8</charset>
<!-- 是否更新 -->
<update>true</update>
<port>8877</port><!--配置tomcat启动的端口号,不适用于远程部署-->
<path>/myProject</path><!--配置项目的访问名称-->
</configuration>
</plugin>
</plugins>
</build>
当然,还有另外一种配置server的方式。其实就是将用户名和密码配置到maven的配置文件中
然后配置maven的插件(其实就是用户名和密码换成了使用server)
<build>
<plugins>
<!-- 让maven去下载一个tomcat来运行当前项目 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://192.168.21.128:8080/manager/text</url>
<!-- 配置用户名密码-->
<server>tomcat8</server>
<charset>utf8</charset>
<!-- 是否更新 -->
<update>true</update>
<port>8877</port><!--配置tomcat启动的端口号,不适用于远程部署-->
<path>/myProject</path><!--配置项目的访问名称-->
</configuration>
</plugin>
</plugins>
</build>
使用tomcat插件进行部署
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。