maven ZZ学习笔记,讲解的很好

每家公司都具有自己的仓库
parent pom
 * 编译检查--检查重复类,重复包
 * 公共依赖  : 每个项目每个人都依赖公司的
 * 必须引用  : 每个项目都引用公司的 parent pom
 (1), 重复包
 Guava 也要依赖第三方,比如guava 15的版本依赖 A 包1.0,然后你自己的项目也间接依赖 A包1.1.此时编译成 war包的时候,你运行期??
 answ : classload 不固定,要看 classload 的加载顺序。运行期,其实有可能出问题,...
 解决方案是 : 将依赖树列出来,有重复的就不让过。


 我们给别人发布jar包的时候,是不能有配置文件的。原因 : 比如你的jar包中有个 配置文件 XXX.xml, 然后用户也有可能有这个 XXX.xml 名字的。
 (2), 重复类
   你将别人(如:guava.jar)包中的 类 用到了,加入到了你自己的jar文件中,你用guava.jar具有这个类
pom
  gid : 相当于你的
  aid : 
  version :
  scope : 没写默认是compile,-- runtime, compile, provided, test  代表不会 download 到本地。 
   answ : 面向接口编程,编码的时候只需要依赖 API 的包,等 runtime 的时候,实现就加载进来。 
    jdbc 编译的时候,没问题。你是面向接口编程。
    
    API <---- JDBC.jar  接口
            Mysql-Connect.jar 实现
            PG-connect.jar    实现
       runtime 
       compile
       provide 
       test 只能在 test 中引用这个包中的类,在其他目录中是引用不到的。
  servlet-api.jar 与 jdbc 那个例子很像,但是不是 runtime
  tomcat7 实现 servlet3.0
  tomcat6 不能完全支持 servlet3.0, provide 的意思是依赖容易给予提供的包 
  
  抽象出 parent-pom 第一是做管理,第二是做节省大家的重复度
  
  每一个leader都要检查你的 pom.xml 是否符合规范
  
  parent.pom 是 guava 13.0.1, 你想引用 15.0, 那么就类似要 overvide
  
* dependencies 是你项目真正的依赖
* properties 是常量
 mvn package -p     
 
原文地址:https://www.cnblogs.com/robbychan/p/3786795.html