04-maven仓库和坐标

1.maven仓库                                                                                                             
仓库指的是在某个位置统一存储所有maven项目共享构件.
可以这样理解:在电脑的某个位置存储构件.

依赖:项目对jar包的依赖.
本地仓库:之前有配置过E:\mavenRepository(settings.xml),缓存需要的构件.

中央仓库:所有的项目都指向maven的中央仓库;
私服:局域网内的一个仓库服务器.

中央仓库:(服务器在国外,有可能无法访问,或者访问比较慢)
pom-4.0.0.xml是maven最顶级的pom文件,所有的项目都继承自该pom文件,该文件配置了maven的中央仓库.
  1. -<repository>
  2. <id>central</id> //唯一的
  3. <name>Central Repository</name> //指定仓库的名字
  4. <url>https://repo.maven.apache.org/maven2</url> //指定仓库的路径
  5. <layout>default</layout> //布局
  6. -<snapshots>
  7. <enabled>false</enabled> //默认不支持快照下载
  8. </snapshots>
  9. </repository>

pom-4.0.0.xml所在位置:
E:\apache-maven-3.3.3\lib\maven-model-builder-3.3.3.jar\org\apache\maven\model\pom-4.0.0.xml
查看maven的中央仓库:https://repo.maven.apache.org/maven2   //存储所有的构件
maven中央仓库的搜索界面:https://search.maven.org/       //支持对所有构件的下载
镜像仓库:(更快,更稳定)
settings.xml配置镜像仓库文件
E:\apache-maven-3.3.3\conf\settings.xml
  1. <mirrors>
  2. <!-- mirror
  3. | Specifies a repository mirror site to use instead of a given repository. The repository that
  4. | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
  5. | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
  6. |
  7. <mirror> //配置镜像仓库 如果需要配置的话将<mirror>...</mirror>拷贝出来即可
  8. <id>mirrorId</id> //如果配置了镜像仓库,不会使用中央仓库
  9. <mirrorOf>repositoryId</mirrorOf>
  10. <name>Human Readable Name for this Mirror.</name>
  11. <url>http://my.repository.com/repo/path</url>
  12. </mirror>
  13. -->
  14. </mirrors>
项目如何去寻找构件:
maven.PNG
2.maven坐标                                                                                                      
1)坐标定义
坐标是标识构件在仓库中的唯一位置.通过坐标可以在仓库中找到构件.
坐标属性:(从这里可以看出:在定义项目的时候已经定义好了坐标,定义项目的时候需要用到坐标的这三个属性)

通过坐标找到唯一的项目.

2)项目如何添加构件依赖

示例:
在之前导入到eclipse下的maven-01项目下演示:
1)到中央仓库搜索spring-test构件,并选择org.springframework : spring-test : 4.2.6.RELEASE
2)复制该构件的依赖,添加到项目maven-01的pom.xml文件下
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion> //标示了pom文件的版本号
  4. <groupId>com.sohu.train</groupId> //标识当前项目的坐标
  5. <artifactId>maven-01</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>jar</packaging> //项目打包的格式
  8. <name>maven-01</name> //指定项目名称
  9. <url>http://maven.apache.org</url>
  10. <properties> //编码格式
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <!-- 添加构件依赖 -->
  14. <dependencies> //添加构件依赖
  15. <dependency>
  16. <groupId>junit</groupId>
  17. <artifactId>junit</artifactId>
  18. <version>3.8.1</version>
  19. <scope>test</scope>
  20. </dependency>

  21. <!-- 新添加进来的--> //添加成功会在Maven Dependencies 这里看到下载好的spring-test
  22. <dependency>
  23. <groupId>org.springframework</groupId>
  24. <artifactId>spring-test</artifactId>
  25. <version>4.2.6.RELEASE</version>
  26. </dependency>
  27. </dependencies>
  28. </project>


3.如何发布项目到仓库                                                                                                    
 1) mvn install      发布到本地仓库
  CMD进入maven-01工程目录下执行命令mvn install:
  1. F:\mavenDemo\train\maven-01>mvn install
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] ------------------------------------------------------------------------
  5. [INFO] Building maven-01 1.0-SNAPSHOT
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO]
  8. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-01 ---
  9. [INFO] Using 'UTF-8' encoding to copy filtered resources.
  10. [INFO] skip non existing resourceDirectory F:\mavenDemo\train\maven-01\src\main\resources
  11. [INFO]
  12. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-01 ---
  13. [INFO] Nothing to compile - all classes are up to date
  14. [INFO]
  15. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-01 ---
  16. [INFO] Using 'UTF-8' encoding to copy filtered resources.
  17. [INFO] skip non existing resourceDirectory F:\mavenDemo\train\maven-01\src\test\resources
  18. [INFO]
  19. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-01 ---
  20. [INFO] Changes detected - recompiling the module!
  21. [INFO] Compiling 1 source file to F:\mavenDemo\train\maven-01\target\test-classes
  22. [INFO]
  23. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-01 ---
  24. [INFO] Surefire report directory: F:\mavenDemo\train\maven-01\target\surefire-reports
  25. -------------------------------------------------------
  26. T E S T S
  27. -------------------------------------------------------
  28. Running com.sohu.train.AppTest
  29. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec
  30. Results :
  31. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
  32. [INFO]
  33. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven-01 ---
  34. [INFO] Building jar: F:\mavenDemo\train\maven-01\target\maven-01-1.0-SNAPSHOT.jar
  35. [INFO]
  36. [INFO] --- maven-install-plugin:2.4:install (default-install) @ maven-01 ---
  37. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom
  38. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom (3 KB at 1.2 KB/sec)
  39. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.1/plexus-3.1.pom
  40. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.1/plexus-3.1.pom (19 KB at 15.8 KB/sec)
  41. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom
  42. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom (2 KB at 1.4 KB/sec)
  43. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom
  44. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom (5 KB at 5.9 KB/sec)
  45. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom
  46. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom (8 KB at 5.5 KB/sec)
  47. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom
  48. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom (8 KB at 4.0 KB/sec)
  49. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar
  50. Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar
  51. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar (12 KB at 6.2 KB/sec)
  52. Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar (226 KB at 53.2 KB/sec)
  53. //将打包好的jar文件放到本地的仓库目录文件夹下
  54. [INFO] Installing F:\mavenDemo\train\maven-01\target\maven-01-1.0-SNAPSHOT.jar to E:\mavenRepository\com\sohu\train\maven-01\1.0-SNAPSHOT\maven-01-1.0-SNAPSHOT.jar
  55. [INFO] Installing F:\mavenDemo\train\maven-01\pom.xml to E:\mavenRepository\com\sohu\train\maven-01\1.0-SNAPSHOT\maven-01-1.0-SNAPSHOT.pom
  56. [INFO] ------------------------------------------------------------------------
  57. [INFO] BUILD SUCCESS
  58. [INFO] ------------------------------------------------------------------------
  59. [INFO] Total time: 15.444 s
  60. [INFO] Finished at: 2016-05-13T19:32:34+08:00
  61. [INFO] Final Memory: 20M/225M
  62. [INFO] ------------------------------------------------------------------------

 2) mvn deploy     发布到远程仓库
    远程仓库地址配置和远程仓库验证信息配置

4. 依赖的特性                                                                           
1) 依赖范围
通过scope标签去定义我们构建的范围.maven在运行的时候有三套classpath;classpath是为了所构建的程序运行在Java环境下.

2) 依赖传递

mvn.PNG

3) 依赖排除

示例:
排除项目maven0-01下commons-logging-1.2.jar依赖 (注意:启动eclipse的自动编译功能或者手动编译)
找到该依赖(commons-logging-1.2.jar)的pom.xml文件拷贝groupId和artifactId这两行,添加到maven-01项目下的pom.xml文件下
  1. <!-- 添加构件依赖 -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-test</artifactId>
  5. <version>4.2.6.RELEASE</version>
  6. <!-- 排除依赖 -->
  7. <exclusions>
  8. <exclusion>
  9. <groupId>commons-logging</groupId>
  10. <artifactId>commons-logging</artifactId>
  11. </exclusion>
  12. </exclusions>
  13. </dependency>
mvn01.PNG

4) 依赖的冲突

示例:
1.短路优先原则:
注释点maven-01的依赖排除;
maven-01依赖maven-03:
a.打包maven-03到本地仓库(执行命令:mvn install)
b.maven-01工程依赖maven-03工程:
配置maven-01的pom.xml文件
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-01</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>maven-01</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- 添加构件依赖 -->
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-test</artifactId>
  24. <version>4.2.6.RELEASE</version>
  25. <!-- 排除依赖 <exclusions> <exclusion> <groupId>commons-logging</groupId>
  26. <artifactId>commons-logging</artifactId> </exclusion> </exclusions> -->
  27. </dependency>
  28. <!-- 添加对maven-03依赖 -->
  29. <dependency>
  30. <groupId>com.sohu.train</groupId>
  31. <artifactId>maven-03</artifactId>
  32. <version>0.0.1-SNAPSHOT</version>
  33. </dependency>
  34. </dependencies>
  35. </project>
mvn03.PNG
配置maven-03的pom.xml文件:
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-03</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>maven-03</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- commons-logging依赖 -->
  21. <dependency>
  22. <groupId>commons-logging</groupId>
  23. <artifactId>commons-logging</artifactId>
  24. <version>1.1.3</version>
  25. </dependency>
  26. </dependencies>
  27. </project>
mvn04.PNG

查看项目依赖的树形结构:
  1. F:\mavenDemo\train\maven-01>mvn dependency:tree
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] ------------------------------------------------------------------------
  5. [INFO] Building maven-01 1.0-SNAPSHOT
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO]
  8. [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-01 ---
  9. [INFO] com.sohu.train:maven-01:jar:1.0-SNAPSHOT
  10. [INFO] +- junit:junit:jar:3.8.1:test
  11. [INFO] +- org.springframework:spring-test:jar:4.2.6.RELEASE:compile
  12. [INFO] | \- org.springframework:spring-core:jar:4.2.6.RELEASE:compile
  13. [INFO] | \- commons-logging:commons-logging:jar:1.2:compile
  14. [INFO] \- com.sohu.train:maven-03:jar:0.0.1-SNAPSHOT:compile
  15. [INFO] ------------------------------------------------------------------------
  16. [INFO] BUILD SUCCESS
  17. [INFO] ------------------------------------------------------------------------
  18. [INFO] Total time: 2.168 s
  19. [INFO] Finished at: 2016-05-14T21:33:41+08:00
  20. [INFO] Final Memory: 12M/154M
  21. [INFO] ------------------------------------------------------------------------

2.先声明先优先原则
1)新建maven-02工程,
2)打包maven-02工程到本地仓库(mvn install)
3)maven-01对maven-02的依赖
配置maven-01的pom.xml文件:
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-01</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>maven-01</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- 添加构件依赖 -->
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-test</artifactId>
  24. <version>4.2.6.RELEASE</version>
  25. <!-- 排除依赖 <exclusions> <exclusion> <groupId>commons-logging</groupId>
  26. <artifactId>commons-logging</artifactId> </exclusion> </exclusions> -->
  27. </dependency>
  28. <!-- 添加maven-02依赖 --> //maven-02先声明
  29. <dependency>
  30. <groupId>com.sohu.train</groupId>
  31. <artifactId>maven-02</artifactId>
  32. <version>0.0.1-SNAPSHOT</version>
  33. </dependency>
  34. <!-- 添加对maven-03依赖 -->
  35. <dependency>
  36. <groupId>com.sohu.train</groupId>
  37. <artifactId>maven-03</artifactId>
  38. <version>0.0.1-SNAPSHOT</version>
  39. </dependency>
  40. </dependencies>
  41. </project>
mvn05.PNG
配置maven-02的pom.xml文件:
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sohu.train</groupId>
  5. <artifactId>maven-02</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>maven-02</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- commons-logging依赖 -->
  21. <dependency>
  22. <groupId>commons-logging</groupId>
  23. <artifactId>commons-logging</artifactId>
  24. <version>1.1.2</version>
  25. </dependency>
  26. </dependencies>
  27. </project>
mvn06.PNG





posted @ 2016-05-20 11:31  iMinority  阅读(1116)  评论(0)    收藏  举报