-
040_Maven详解
Maven
maven项目架构管理工具
我们目前用来导入jar包
- maven的核心思想:约定大于配置
-
maven会规定好如何编写java代码,必须按照这个规范执行
下载安装Maven
- Maven官网:http://maven.apache.org/
- 下载maven:apache-maven-3.6.3-bin.zip
- 解压apache-maven-3.6.3-bin.zip
配置环境变量
- 配置MAVEN_HOME D:\environment\apache-maven-3.6.3
- 配置M2_HOME D:\environment\apache-maven-3.6.3\bin
- 配置PATH ;%MAVEN_HOME%\bin;
- 测试maven
C:\Users\Administrator>mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\environment\apache-maven-3.6.3\bin\..
Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: D:\environment\Jav
a\jdk1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
C:\Users\Administrator>
配置阿里云镜像
镜像:mirrors
作用:加速下载
国内建议使用阿里云镜像
- 搜索阿里云镜像配置 maven 阿里云镜像
- D:\environment\apache-maven-3.6.3\conf\settings.xml中配置阿里云镜像
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
匹配所有远程仓库。
repo1,repo2
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
,!repo1
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
配置本地仓库
- maven下新建目录maven-repo
- D:\environment\apache-maven-3.6.3\conf\settings.xml中配置本地仓库路径
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\environment\apache-maven-3.6.3\maven-repo</localRepository>
idea中使用Maven创建web项目
创建MavenWeb项目
自动导入包时,报错问题:Unable to import maven project: See logs for details
如果自动导入包时,报错:
Unable to import maven project: See logs for details
可以是idea和maven版本冲突,可以降低maven版本
如:idea2018与maven3.6.3版本冲突,降低maven版本为3.6.1
切换后导包正常,不再报错。
切换低版本步骤:
- 下载解压maven3.6.1
- 修改环境变量MAVEN_HOME和M2_HOME
- 配置阿里云镜像
- 配置本地仓库
-
修改项目maven配置或重新创建maven项目
等待项目初始化完毕
目录结构
观察maven本地仓库是否下载jar包
idea中的maven设置
idea重复配置maven问题:修改idea中的全局默认配置
或者
创建java和resources目录,并标记为源码目录和资源目录
另一种标记方式,打开项目结构配置标记
idea中配置Tomcat
解决警告:配置项目的两种方式
Maven Projects窗口
pom.xml文件
pom.xml是Maven的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--maven版本和头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--GAV-->
<groupId>com.qing</groupId>
<artifactId>javaweb-01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!--项目的打包方式
jar:java应用
war:Javaweb应用
-->
<packaging>war</packaging>
<!--名称,不重要,可删除-->
<name>javaweb-01-maven Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--配置-->
<properties>
<!--项目的默认构建编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编译版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!--具体依赖的jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--项目构建配置-->
<build>
<finalName>javaweb-01-maven</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
idea中默认生成的web.xml版本较低,参考Tomcat修改2.3为4.0
默认生成的:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
修改参考Tomcat中的web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
maven仓库的使用 MVN repository
地址:https://mvnrepository.com/
- 进入网站
- 根据已知或相关jar包名搜索,找使用人数相对多的,然后看包名
- 找使用人数相对多的版本
- 复制pom文件配置
- 粘贴到pom.xml中
<!--项目依赖-->
<dependencies>
<!--具体依赖的jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--作用域,可选-->
<!--<scope>provided</scope>-->
</dependency>
</dependencies>
idea中使用Maven创建普通项目
创建普通项目
目录结构
maven的高级之处在于:会导入pom文件中配置的jar包所依赖的jar包
maven资源导出问题(配置文件)
maven由于约定大于配置,src/main/java中不允许写xml和properties文件,如果写了,有可能会出现配置文件无法导出或生效问题
解决方案:
<build>
.......
<!--在build中配置resources,防止资源导出失败的问题-->
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
......
</build>
idea依赖目录树
原文:https://www.cnblogs.com/wl3pb/p/14502896.html