maven 常见基础问题

1.maven多项目管理

1️⃣继承关系 maven默认根据目录结构来设定pom的继承关系,即下级目录的pom默认继承上级目录的pom;

上级pom定义module(parent)

 
    ABCCommon 
    ABCCore 
    ABCTools 

注意:ABCCommon是module的目录名

module

 
    com.abc.product1 
    abc-product1 
    1.0.0-SNAPSHOT 
 
abc-my-module2 
jar

parent与module相关联起来,继承关系就设定完毕,所有父工程的配置内容都会自动在子工程中生效,除非子工程有相同的配置覆盖

2️⃣引用关系

是另外一种复用的方式,加入一个 type 为 pom 的依赖即可

 
    org.sonatype.mavenbook 
    persistence-deps 
    1.0 
    pom 


但是无论是父项目还是引用项目,这些工程都必须用 mvn install 或者 mvn deploy 安装到本地库才行,否则会报告依赖没有找到,eclipse编译时候也会出错

注意:复用过程中,父项目的pom中可以定义 dependencyManagement 节点,其中存放依赖关系,但是这个依赖关系只是定义,不会真的产生效果,如果子项目想要使用这个依赖关系,可以在本身的 dependency 中添加一个简化的引用

 
    org.springframework 
    spring 

避免版本号满天飞

2.有些sun的licnece的限制,无法包含在repository中,所以我们需要使用mvn命令将jar包安装到本地repository中或者公司的repository中

3.pom中定义的自定义属性

 
    ... 
     
        hello 
     
    ... 
 

${my.filter.value}得到对应的hello值

4.如何屏蔽一个依赖关系?比如项目中使用的libA依赖某个库的1.0版,libB以来某个库的2.0版,现在想统一使用2.0版,如何去掉1.0版的依赖?

设置exclusion即可

 
    org.hibernate 
    hibernate 
    3.2.5.ga 
     
         
            javax.transaction 
            jta 
         
     

5.我有一些jar文件要依赖,但是我又不想把这些jar去install到mvn的repository中去,怎么做配置?

加入一个特殊的依赖关系,使用system类型

 
    com.abc 
    my-tools 
    2.5.0 
    jar 
    system 

注:但是要记住,发布的时候不会复制这个jar。需要手工配置,而且其他project依赖这个project的时候,会报告警告

6.想让输出的jar包自动包含所有的依赖

 
    maven-assembly-plugin 
     
         
            jar-with-dependencies 
         
     


7.我的测试用例依赖于其他工程的测试用例,如何设置?

maven本身在发布的时候,可以发布单纯的jar,也可以同时发布xxx-tests.jar和xxx-javadoc.jar(大家经常在repository中可以看到类似的东西)。我们自己的项目A要同时输出test.jar可以做如下的设置

 
 
    org.apache.maven.plugins 
    maven-jar-plugin 
     
         
             
                test-jar 
             
         
     


然后在其他需要引用的工程B中做如下的dependency设置

 
    com.abc.XXX 
    工程A 
    ${project.version} 
    test-jar 
    test 


8.如何使用变量替换?项目中的某个配置文件比如jdbc.properties使用了一些pom中的变量,如何在发布中使用包含真实内容的最终结果文件?

 
    ... 
     
        com.mysql.jdbc.Driver 
        jdbc:mysql://localhost:3306/development_db 
        dev_user 
        s3cr3tw0rd 
     
    ... 
     
         
             
                src/main/resources 
                true 
             
         
     
    ... 
     
         
            production 
             
                oracle.jdbc.driver.OracleDriver 
                jdbc:oracle:thin:@proddb01:1521:PROD 
                prod_user 
                s00p3rs3cr3t 
             
         
     

9.我的程序有些单元测试有错误,如何忽略测试步骤?

① -Dmaven.test.skip=true 或者 -DskipTests=true 
② 另外一种是给surefire插件增加参数


    
      
        org.apache.maven.plugins
        maven-surefire-plugin
        2.8
        
          true
        
      
    
  

10. 如果只想运行单个测试用例,能否实现?

-Dtest=MyTest 即可,其中MyTest是所需要运行的单元测试用例名称

11.如何给插件指派参数?

参考对应插件的帮助信息

 
        ... 
         
             
                maven-compiler-plugin 
                 
                    1.5 
                    1.5 
                 
             
         
        ... 
     

12.我的目录是非标准的目录结构,如何设置让maven支持?

 
    target 
    src 
    js/scripts 
    test 
    bin 
    bin 

其他的可能自以为不是很重要,摘录自
https://www.cnblogs.com/BigTall/archive/2011/03/23/1993253.html

你可能感兴趣的:(java)