开发过程中,项目工程需要引入第三方jar,比如jdbc相关的jar,我们需要将其引入到classpath,
然后项目工程才能使用jar中的接口、类及方法等。
maven提供三种classpath:
1,编译 -> compile (默认的范围,表示依赖范围在编译、测试、运行都有效的时候有效)
2,测试 -> test (表示依赖范围只存在测试的时候有效,如junit)
3,运行 -> run (表示依赖范围只存在运行的时候有效)
4,提供依赖 -> provided (在编译、测试时有效,最后运行时不会被加入, 如servlet-api.jar, 因为tomcat等服务容器包含相关api)
5,运行环境 -> runtime (在测试和运行时有效)
6,系统环境 -> system (与本机系统相关联,在编译、测试时有效, 可移植性差)
7,导入 -> import (导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置)
依赖传递
下面举例说明maven的依赖传递,分别创建三个maven工程A、B、C,其pom文件如下图
创建完成以后,发现C工程未直接引入A的坐标,但依赖目录里有A的相关依赖,由此说明依赖的传递性,如下图
对于日常的开发过程中,可能遇到C工程不想依赖A工程的jar(比如log4j的api,Struts和Spring都有相关的依赖),这就需要对依赖处理,比如排除依赖exclusions,做出稍微修改,效果如下:
---------------------------------------------------------------------------------------------------
注意:另发现工程中的jre版本与实际引入的jre版本不同,如下修改
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对于eclipse中,每次新创建maven工程都出现上面的jre版本不一致的情况,可以修改maven配置文件里的设置,
E:\maven\apache-maven-3.3.3\conf\settings.xml, 打开找到profiles标签,加入如下代码即可
<profiles>
<id>jdk-1.7</id>
<!-- activation:这是profile中最重要的元素。跟pom.xml中的profile一样,
settings.xml中的profile也可以在特定环境下改变一些值,而这些环境是通过activation元素来指定的。 -->
<activation>
<!-- activeByDefault:当其值为true的时候表示如果没有其他的profile处于激活状态的时候,
该profile将自动被激活 -->
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<!-- properties:用于定义属性键值对的。当该profile是激活状态的时候,
properties下面指定的属性都可以在pom.xml中使用。 -->
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profiles>