仅供比克maven日常使用
最前面
maven基础结构
maven 项目目录结构
$ MavenProject
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- resources
| `-- test
| | `-- java
| | `-- resources
说明:一般将java的功能代码,放在main/java下面,而测试代码放在test/java下,这样在运行时,maven才可以识别目录并进行编译。
路径 | 说明 |
---|---|
src/main/java |
存放项目.java文件; |
src/main/resources |
存放项目资源文件; |
src/test/java |
存放测试类.java文件; |
src/test/resources |
存放测试资源文件; |
target |
项目输出目录; |
pom.xml |
Maven核心文件(Project Object Model) |
maven 常用命令
- Maven常用命令详解
1、mvn compile 编译,将Java 源程序编译成 class 字节码文件。 2、mvn test 测试,并生成测试报告 3、mvn clean 将以前编译得到的旧的 class 字节码文件删除 4、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。 5、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
maven打包操作
-
对应的目录结构建立
- 添加profile配置
在pom中需进行打包前的配置
一个典型的环境配置
<!--打包环境配置 开发环境dev 测试环境test 正式环境product--> <profiles> <profile> <!--不同环境Profile的唯一id--> <id>dev</id> <properties> <!--profiles.active是自定义的字段(名字随便起), 也有大量使用env,自定义字段可以有多个--> <profiles.active>dev</profiles.active> </properties> <!--activation字段定义默认打包环境为dev--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> </properties> </profile> <profile> <id>product</id> <properties> <profiles.active>product</profiles.active> </properties> </profile> </profiles>
properties字段内往往带有更多配置,这里为数据库
<!--properties字段内往往带有更多配置,这里为数据库--> <profile> <id>test</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3306/test_db</db.url> <db.username>root</db.username> <db.password>root</db.password> </properties> </profile>
-
资源文件配置
同样在pom文件中,
标签内 <!--对于项目资源文件的配置放在 build中--> <resources> <resource> <!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包--> <directory>src/main/resources/${profiles.active}</directory> <resource> <resource> <directory>src/main/resources/</directory> <includes> <!--这里全选不过滤,视具体情况调整--> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> </resources>
-
执行打包操作(命令)
idea 中 run/debug Configuaration 打包命令
## 打包默认环境 clean compile package ## 选择本地开发环境打包 clean compile package -Pdev ## 跳过maven测试操作 打包 clean compile package -Pdev -Dmaven.test.skip=true
关于profile
根据 profile 配置的位置不同,可以将 profile 分成如下几种。
-
1)pom.xml
pom.xml 中声明的 profile 只对当前项目有效。
-
2)用户 settings.xml
默认在在用户目录下的“.m2/settings.xml”中的 profile,对本机上的该用户的所有 Maven 项目有效。
-
3)全局 settings.xml
在 Maven 安装目录下 conf/settings.xml 中配置的 profile,对本机上所有项目都有效。
超级pom
待补充
maven依赖
maven的三套classpath
1.在编译本地项目主代码时需要一套classpath
举例,spring-core以依赖的方式引入classpath
2.在执行测试会使用另一套classpath
举例:Junit
3.在实际运行会使用一套classpath
spring-core需要在此classpath,Junit不需要。
-
依赖的基本坐标
- groupId
- artifactId
- version
示例
<dependency> <groupId>com.xxxx</groupId> <artifactId>java-xxxx-server-manager</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
-
依赖类型
默认为jar,大部分时间无需声明。
-
依赖范围
-
compile
编译依赖范围如果没有指定,就会默认使用该依赖范围。使用此依赖范围的 Maven依赖,对于编译、测试、运行三种classpath都有效。
-
test
测试依赖范围使用此依赖范围的 Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
-
provided
已提供依赖范围使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是serevlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复引入。
-
runtime
运行时依赖范围使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
-
system
系统依赖范围该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成枃建的不可移植,因此应该谨慎使用,基本不用。
-
传递依赖机制 传递性依赖冲突时,交由maven解析各个直接依赖的pom,将哪些必要的间接依赖以传递性依赖的形式引入当前项目中。
举例:
A-->B-->C(2.0)
A-->E-->C(1.0)
A同时依赖两个版本的C,产生冲突。
<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>xxxxxxxx</version>
<exclusions>
<!--对于依赖冲突,maven自动选择适合的版本-->
<exclusion>
<groupId>C</groupId>
<artifactId>C</artifactId>
<exclusion>
<exclusions>
</dependency>