Maven应用 - DAY2

1.构建项目
2.依赖管理
3.脱离IDE对项目进行 编译、测试、打包、安装


maven的声明周期.png

4.版本规范


版本规范.png

5.关于pom.xml

<scope>指定依赖作用范围

Maven提供了三种 classPath 分别是编译、测试、运行
例如要依赖JUnit包 ,JUnit只存在于测试的classPath中
在<dependency>中配置<scope></scope>
<scope></scope>中可写的值有6种,分别是:
compile:默认范围,编译测试运行都有效
provided:在编译和测试时有效 , 例如ServletAPI
runtime:在测试和运行时有效 ,例如JDBC驱动
test:只在测试时有效,例如 JUnit
system:在编译和测试时有效 ,但与本机系统相关联,可移植性差。例如关联本机的JAVA_HOME,移植到其他机器JAVA_HOME路径不一致会导致错误
import:导入的范围,它只使用在dependencyManagement中,表示从其他pom导入的依赖配置

Maven 传递依赖

传递依赖
如果 A构件 依赖 B构件
B构件 依赖 C构件
则 A构件 也依赖于 C构件

排除依赖

    <exclusions>
        <exclusion>
            要排除构件的坐标
        </exclusion>
    <exclusions>

Maven 依赖冲突

依赖冲突
如A构件和B构件依赖了一个不同版本的相同构件 ,则产生了依赖冲突
依赖冲突的处理原则
1.短路优先
优先解析路径短的版本
例如 A -> B ->C -> X(jar)
A -> D ->X (jar)
优先解析路径短的版本
2.声明优先
如果路径长度相同,则谁先声明,先解析谁

1 Maven命令

1.1编译 mvn compile


会自动从本地仓库或中央仓库获取所需要的Jar包
1.2测试 mvn test

1.3打包 mvn package

可打包成 jar包(默认)war包,pom

1.4安装 mvn install (自动执行编译、测试、打包、安装(将打包后的jar包放置到本地仓库))

本地仓库对应的位置

1.5 自动创建Maven目录结构 mvn archetype:generate
oa2项目

使用项目前的文件夹

使用mvn archetype:generate命令

默认7则回车

设置坐标,默认则回车

创建成功后的目录结构
<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>

  <groupId>com.oracle</groupId>
  <artifactId>oa2</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>oa2</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
<!--oa2调用oa2里面的类-->
   <dependency>
      <groupId>com.oracle</groupId>  
      <artifactId>oa1</artifactId>  
      <version>0.0.1-SNAPSHOT</version>  
    </dependency>
  </dependencies>
</project>

编译后显示 BUILD SUCCESS则成功


image.png

2.Maven在Eclipse的配置

window -- Perferences -- Maven -- installations -- add 添加Maven Home,完成后,勾选新加的Maven


window -- Perferences -- Maven -- User settings -- 配置User Settings 指向Maven中 setttings.xml配置文件


创建Maven项目


image.png

pom.xml

<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>

<groupId>com.zps</groupId>
<artifactId>oa1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>oa1</name>
<url>http://maven.apache.org</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
</dependencies>
</project>
image.png
package com.zps.oa1;

/**
* Hello world!
*
*/
public class HelloWorld 
{
   public static void main( String[] args )
   {
       System.out.println( "Hello World!" );
   }

   public String sayHello(String name) {
       
       return name + " say hello";
   }
}

package com.zps.oa1;

import org.junit.Assert;
import org.junit.Test;


/**
 * Hello world!
 *
 */
public class HelloWorldTest
{
    @Test
    public void satHelloTest() {
        Assert.assertEquals("tom say hello", new App().sayHello("tom"));
    }
}


image.png

oa2 依赖 oa1

oa1--->maven build


image.png

创建oa2项目


image.png
  <dependencies>
    <dependency>
     <groupId>com.zps</groupId>
     <artifactId>oa1</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <!-- 
     <exclusions>
       <exclusion>
      
       </exclusion>
     </exclusions>
      -->
    </dependency>
  </dependencies>

oa统一管理

  <modules>
        <module>../oa1</module>
        <module>../oa2</module>
        <module>oa3</module>
  </modules> 
<!--对依赖的版本进行管理,但并没有导入依赖-->
<dependencyManagement>
    <dependencies>
    <dependency>
      ...
    </dependency>
  </dependencies>
</dependencyManagement>

子类导入父类依赖不需要导入版本

oa1/oa2 继承父类依赖

   <parent>
    <groupId>com.zps</groupId>
    <artifactId>oa</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

oa里面创建模块oa3



创建后的目录结构
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。