一般在企业中maven都有三个仓库:本地仓库,私有仓库,中央仓库。
关系图如下:
下载包的顺序分别为:本地仓库、私有仓库、中央仓库。
其中默认的本地仓库在 .m2的repository中,也可以自己设置中央仓库的地址(修改settings.xml文件):
<localRepository>path</localRepository>
创建maven可以使用骨架,例如使用最简单的骨架:
mvn archetype:generate
groupId 、artifactId、version唯一定位一个依赖。
<dependencies>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>
scope的使用(默认就是compile):
test 依赖不会被传递,打包的时候不会被打进去 编译也不会用
compile 编译和打包时候都会将依赖存储进去,会用到编译和测试
provided 编译测试的时候有用,但是打包的时候不用加进去,比如servlet的api在tomcat中已经有了,就不用打包进去
runtime 运行时候有依赖,编译的时候不依赖
依赖的传递冲突:
1.如果C项目于A和B且A和B中都有依赖d,A是d的1.0.1版本,B是d的1.0.2版本,在C的pom中A和B那个依赖写前面就依赖谁的
2.如果C项目于A和B且A依赖D,D有依赖d 1.0.1版本,B有依赖d的1.0.2版本,那么C的pom中d的版本就是路径最小的,这里是1.0.2
3.排除掉com.lijie.core里面的log4j版本
<exclusions>
<groupId>com.lijie.core</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
4.直接写一层的依赖
依赖的继承与聚合:
1.聚合只需要建立一个文件的就行了,一个地方编译多个文件
<packaging>pom</packaging> 打包方式为pom
<modules>
<module>lijie-manager-pojo</module>
<module>lijie-manager-mapper</module>
<module>lijie-manager-service</module>
<module>lijie-manager-web</module>
</modules>
2.继承
子pom集成父pom按照如下方式:
<parent>
<groupId>com.lijie</groupId>
<artifactId>lijie-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
其中父类中只定义依赖版本,并不依赖,子类中自己去定义依赖:
父pom:
<!-- 只定义依赖版本 并不依赖 -->
<dependencyManagement>
<dependencies>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<dependencies>
</dependencyManagement>
<build>
<!-- 只定义依赖版本 并不依赖 -->
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
子pom:
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8085</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
父类中也可直接定义,子类都会拥有:
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>