我的idea出现了一个很怪异的问题,不知道为什么,只能下载jar包,却无法下载源码。 因jar相关的都在maven中配置,所以详细搞一搞maven的配置文件。

1、仓库加载顺序

1.1、两个相同级别的mirror

优先使用上面的镜像仓库,如下例子会从id为nexus的仓库中取jar包:

  1. <mirror>
  2. <id>nexus</id>
  3. <mirrorOf>*</mirrorOf>
  4. <url>http://maven.*.com/nexus/content/groups/public</url>
  5. </mirror>
  6. <mirror>
  7. <id>nexus-aliyun</id>
  8. <name>Nexus aliyun</name>
  9. <mirrorOf>*</mirrorOf>
  10. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  11. </mirror>

1.2、指定central仓库后

即使将第二个设置为central,maven也会从mirrorOf为central的仓库取jar包:

  1. <mirror>
  2. <id>nexus</id>
  3. <mirrorOf>*</mirrorOf>
  4. <url>http://maven.*.com/nexus/content/groups/public</url>
  5. </mirror>
  6. <mirror>
  7. <id>nexus-aliyun</id>
  8. <name>Nexus aliyun</name>
  9. <mirrorOf>central</mirrorOf>
  10. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  11. </mirror>

1.3、配置自定义的mirrorOf

会优先使用自定义。
注意,如果私服只支持某一种jar下载(比如只支持snapshot类型的,一定要配置上可以支持另外一种下载类型,不然只能下载jar,却无法下载源码[没明白为什么会出现这个情况])

  1. <mirrors>
  2. <mirror>
  3. <id>nexus-public-snapshots</id>
  4. <mirrorOf>public-snapshots</mirrorOf>
  5. <url>http://maven.*.com/nexus/content/repositories/snapshots/</url>
  6. </mirror>
  7. <mirror>
  8. <id>nexus</id>
  9. <mirrorOf>public</mirrorOf>
  10. <url>http://maven.*.com/nexus/content/groups/public</url>
  11. </mirror>
  12. </mirrors>
  13. <profiles>
  14. <profile>
  15. <id>public-snapshots</id>
  16. <repositories>
  17. <repository>
  18. <id>public-snapshots</id>
  19. <url>http://public-snapshots</url>
  20. <releases>
  21. <enabled>false</enabled>
  22. </releases>
  23. <snapshots>
  24. <enabled>true</enabled>
  25. </snapshots>
  26. </repository>
  27. </repositories>
  28. <pluginRepositories>
  29. <pluginRepository>
  30. <id>public-snapshots</id>
  31. <url>http://public-snapshots</url>
  32. <releases>
  33. <enabled>false</enabled>
  34. </releases>
  35. <snapshots>
  36. <enabled>true</enabled>
  37. </snapshots>
  38. </pluginRepository>
  39. </pluginRepositories>
  40. </profile>
  41. <profile>
  42. <id>development</id>
  43. <repositories>
  44. <repository>
  45. <id>public</id>
  46. <url>http://public</url>
  47. <releases>
  48. <enabled>true</enabled>
  49. </releases>
  50. <snapshots>
  51. <enabled>true</enabled>
  52. </snapshots>
  53. </repository>
  54. </repositories>
  55. <pluginRepositories>
  56. <pluginRepository>
  57. <id>public</id>
  58. <url>http://public</url>
  59. <releases>
  60. <enabled>true</enabled>
  61. </releases>
  62. <snapshots>
  63. <enabled>true</enabled>
  64. </snapshots>
  65. </pluginRepository>
  66. </pluginRepositories>
  67. </profile>
  68. </profiles>

1.4、自定义mirror和*混用

没发现什么区别,有可能是私服的jar包够全

  1. <mirrors>
  2. <mirror>
  3. <id>ALIYUN</id>
  4. <mirrorOf>*</mirrorOf>
  5. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  6. </mirror>
  7. <mirror>
  8. <id>nexus-public-snapshots</id>
  9. <mirrorOf>public-snapshots</mirrorOf>
  10. <url>http://maven.*.com/nexus/content/repositories/snapshots/</url>
  11. </mirror>
  12. <mirror>
  13. <id>nexus</id>
  14. <mirrorOf>public</mirrorOf>
  15. <url>http://maven.*.com/nexus/content/groups/public</url>
  16. </mirror>
  17. </mirrors>

总结

1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址
2、如果私服只支持某一种jar下载(比如只支持snapshot类型的,一定要配置上可以支持另外一种下载类型,不然只能下载jar,却无法下载源码)
—没明白为什么会出现这个情况,按道理讲,如果不行都不行才对 -_-||
3、只配置mirrorOf为central的时候可以不用配置repository

maven配置文件例子

1、完全使用私服

如果相信自己私服的话,把私服配置成central,可以不配置第三方的仓库

  1. <settings>
  2. <mirrors>
  3. <mirror>
  4. <id>nexus-public-snapshots</id>
  5. <mirrorOf>public-snapshots</mirrorOf>
  6. <url>http://maven.*.com/nexus/content/repositories/snapshots/</url>
  7. </mirror>
  8. <mirror>
  9. <id>nexus</id>
  10. <mirrorOf>central</mirrorOf>
  11. <url>http://maven.*.com/nexus/content/groups/public</url>
  12. </mirror>
  13. </mirrors>
  14. <profiles>
  15. <profile>
  16. <id>public-snapshots</id>
  17. <repositories>
  18. <repository>
  19. <id>public-snapshots</id>
  20. <url>http://public-snapshots</url>
  21. <releases>
  22. <enabled>false</enabled>
  23. </releases>
  24. <snapshots>
  25. <enabled>true</enabled>
  26. </snapshots>
  27. </repository>
  28. </repositories>
  29. <pluginRepositories>
  30. <pluginRepository>
  31. <id>public-snapshots</id>
  32. <url>http://public-snapshots</url>
  33. <releases>
  34. <enabled>false</enabled>
  35. </releases>
  36. <snapshots>
  37. <enabled>true</enabled>
  38. </snapshots>
  39. </pluginRepository>
  40. </pluginRepositories>
  41. </profile>
  42. <profile>
  43. <id>development</id>
  44. <repositories>
  45. <repository>
  46. <id>central</id>
  47. <url>http://central</url>
  48. <releases>
  49. <enabled>true</enabled>
  50. </releases>
  51. <snapshots>
  52. <enabled>true</enabled>
  53. </snapshots>
  54. </repository>
  55. </repositories>
  56. <pluginRepositories>
  57. <pluginRepository>
  58. <id>central</id>
  59. <url>http://central</url>
  60. <releases>
  61. <enabled>true</enabled>
  62. </releases>
  63. <snapshots>
  64. <enabled>true</enabled>
  65. </snapshots>
  66. </pluginRepository>
  67. </pluginRepositories>
  68. </profile>
  69. </profiles>
  70. <activeProfiles>
  71. <activeProfile>development</activeProfile>
  72. <activeProfile>public-snapshots</activeProfile>
  73. </activeProfiles>
  74. <localRepository>/Users/zhqy/install/mavenDBV2</localRepository>
  75. </settings>

2、使用阿里仓库

把阿里私服设置为central,自己的私服设置为*

  1. <settings>
  2. <mirrors>
  3. <mirror>
  4. <id>nexus</id>
  5. <mirrorOf>central</mirrorOf>
  6. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  7. </mirror>
  8. <mirror>
  9. <id>nexus</id>
  10. <mirrorOf>*</mirrorOf>
  11. <url>http://maven.*.com/nexus/content/groups/public</url>
  12. </mirror>
  13. </mirrors>
  14. <profiles>
  15. <profile>
  16. <id>development</id>
  17. </profile>
  18. </profiles>
  19. <activeProfiles>
  20. <activeProfile>development</activeProfile>
  21. </activeProfiles>
  22. <localRepository>/Users/zhqy/install/mavenDBV2</localRepository>
  23. </settings>

关于私服对应的的配置启发来自:https://blog.csdn.net/rockstar541/article/details/77165067
maven的mirror和repository加载顺序:https://www.cnblogs.com/ctxsdhy/p/8482725.html