zoukankan      html  css  js  c++  java
  • Maven实战

    1. maven工程导入Eclipse后,发现包都是文件夹图标;原来是因为需要在eclipse中配置maven的setting文件;也是此时才体会到:当多个eclipse都要配置maven的时候,最好是为每一个都指定一个setting文件,如果都是指向%MVN%/config/settings,那么修改此文件将会影响所有的eclipse项目。

    2. 阿里云Maven库地址:

    http://maven.aliyun.com/nexus/content/groups/public
    http://mvnrepository.com/
    http://repo1.maven.org/maven2

    3. 下载依赖包总是80-90%后失败

       杀毒软件阻碍了下包;下载jar包发现,总是快要下完了,卡在了那个地方,后来想到是不是因为卡巴斯基啊,于是关停了卡巴斯基,完美解决;

    4. 多个中央仓库
      之前主要是玩maven的settings,但是在settings里面只能指定一个仓库;如果想要发现下载失败就换一个仓库,可以在pom文件中这件事情(settings里面可以注释掉):
     <repositories>
            <repository>
                <id>aliyun</id>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            </repository>
            <repository>
                <id>maven_uk</id>
                <url>http://uk.maven.org/maven2/</url> 
            </repository>
            <repository>
                <id>jBoss</id>
                <url>http://repository.jboss.org/nexus/content/groups/public</url>
            </repository>
            <repository>
                <id>cloudera</id>
                <url>https://repository.cloudera.com/cloudera/cloudera-repos</url>
            </repository>
          <repository>
                <id>maven2</id>
                <url>http://repo2.maven.org/maven2/</url>
            </repository>
        </repositories>

     5.maven的快速失败机制

      pom中定义了一个oracle:jdbc6无法下载导致后续的下载失败;maven的下载机制中,一个失败可能导致后续的jar包下载停止;
    6. 下载一部分后失败要删除再下
      明明在central maven上面有spark-core_2.11:1.6.0的jar包,但是我通过intelliJ就是死活下不来。
      后来发现在repository(.m2/repository)中其实已经有了这个这个jar包,但是里面充斥着update文件,说明下载失败过。把spark-core2.11的目录上除掉之后,再删除,完美。
     7. Maven自动下载源码功能
    如果想要查看某个类,如何能够自动下载源码jar包呢?
    其实你什么都不需要做;但是如果你想要在指定jar的时候做些什么得话:
    下面这些方法是在网上找的,但是我觉得技术不做这些事情,仍然可以自动下载,我是指当通过ctrl点击某个类之后,跳转到熟悉的没有source的类汇编的界面之后,eclipse已经开始自动下载了。
     
    方法一:只需要在pom文件中,增加如下内容即可,这种方法比较适合在团队中,因为只是配置pom文件,eclipse不需要做配置:
    <project>
      <properties>
        <downloadSources>true</downloadSources>
      </properties>
    </project>
      方法二:windows->Preferences->maven->勾选上Download Artifact Source即可。
    8. 记一次Maven问题解决
      刚才调试了大半天,就是发现为什么maven web项目突然启动失败了。之前都是好使的。
      因为之前项目是maven的父子关系;后来觉得没有必要搞神马父子关系,于是就把这种关系给删掉;但是悲催的是在设定父子关系的时候,我把groupid(以及version给删掉了),因为我在生命父级节点信息的时候,指定了groupId,于是pom文件报错,说是父级已经设定,子级就不需要了。于是我给删了。
      后来不用之后我把pom中声明父级节点的内容删掉了;但是此时pom就报错了;我也没理会,直接起tomcat于是,报错;但是我就把这个茬给忘记了;也没有细看pom哪里报错,就是一顿瞎调。其实你只要通过pom 的编辑器查看,是可以看到报错的原因的。这个切机被我给忽略了,导致后续的高成本的查找。这个问题解决的关键就是:要知道pom报错,应该通过pom编辑器来确定哪里出问题了。
      要知道哪里出问题,是解决问题的指导。
    9. invalid LOC header (bad signature)
      这个异常明显是因为jar包损坏了。
      可以通过maven test指令来定位发生的地方;但是奇怪的是只是第一次的时候准确的报错了,告诉是因为yarn-resource.jar的LOC异常,之后的执行都通过了;奇怪,因为添加了hive-shim的依赖,hive-him依赖于yarn-resource.jar,后来直接在部署路径下删除,编译通过。
      后来发现原来是因为首先需要mvn clean一下,然后在mvn test;这样就可以重现出现问题的jar包
    10. maven还是要连到仓库
      maven还是要连接点仓库或者私有仓库(例如Nexus),否则只是本地的.m2的仓库在新搭建项目的时候还是不可以。
      我因为开始在pom文件中没有设置repositories信息,导致了后续的一列cloudera包依赖无法识别(本地仓库已经存在该jar包);添加上了cloudera的资源仓库地址后,问题解决;我在想或者通过Nexus应该也可以;反正本地的.m2仓库是不足以做新引入包的处理。
    11. maven项目间的引用正确姿势
      1)添加项目引用(在build path中添加);然后(如果是Web项目)在Assembly Deployment中添加项目引用,目的是部署(到tomcat,或者war包)的时候,将引用工程的jar包打到lib下面;缺点是每次maven工程pom文件变化,将会导致Assembly Deplyment的引用关系丢失;
      2)在maven中引用静态路径,这种方式只是支持web工程,而且前提示将WEB-INF/lib添加到Assembly Deployment里面(该方式主要适用于引入非仓库的jar包);缺点是引用工程的变化无法及时体现出来,每次都需要打包手动拷贝到WEB-INF/lib下面;
    1         <dependency>
    2             <groupId>org.apache.ambari</groupId>
    3             <artifactId>groovy-client</artifactId>
    4             <version>2.0.0.0-SNAPSHOT</version>
    5             <scope>system</scope>
    6             <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/groovy-client-2.0.0.0-SNAPSHOT.jar</systemPath>
    7         </dependency>

       3)保证和引用工程在同一个workspace下面,直接maven引用即可:

    1         <dependency>
    2             <groupId>org.apache.ambari</groupId>
    3             <artifactId>groovy-client</artifactId>
    4             <version>2.0.0.0-SNAPSHOT</version>
    5         </dependency>

        第三种方法是我最后才知道的。

    12. maven的terminal窗口默认路径

      之前一直苦恼于terminal窗口的默认路径是用户文件所在路径;
      其实只要在右键工程-> show in terminal默认路径就是工程所在的路径!
    13. maven的聚合工程从svn/git导入
      你创建了一个父级maven工程(maven project);然后你再创建一个子级工程(mave module),那么子工程自动建在父级工程文件夹下面;
      当你上传到svn上面一个父级工程的时候,自动会把子级工程上传。这个设计很给力,直接自工程置身于父工程的文件夹下面,便于管理。
      但是对于聚合项目,从本地导入聚合工程(multi-module project),是没有问题,如果从svn上面直接下载聚合工程,只下载project,module工程则不见了(藏在project工程中,作为普通文件夹出现)。
      解决办法:
      1)从svn下载之后(import->SVN),先从Eclipse中删除该工程
      2)然后在eclipse中导入刚才下载的工程代码(import -> Maven -> Existing Maven Projects),只需要选择parent文件级别即可一次性导入关联工程(例如选择springcloud-parent文件夹,即可导入springcloud-eureka,springcloud-app等关联工程)。
      后来在使用git的时候,类似,maven的强大我是再次领略了;本地的maven多模块工程上传,只需要选择parent工程上传即可。
    只是,你要把原工程删掉,因为你会发现原工程的子模块模块并没有纳入到git管理(因为你只是上传了parent工程),只有从github上面下载的工程才有全局管理:(
    14. maven的jdk要求
      org/apache/maven/cli/MavenCli : Unsupported major. minor version 51.0
      我本地jdk版本配置的是1.6;然后maven的版本是3.3开始只支持1.7以上,所以要下载3.3以下的版本才可以配合jdk1.6;
    15. maven只要是更新,就会自动把jdk版本改为JSE1.5
      后来在pom中增加如下内容,问题解决:
     1 <build>
     2     <plugins>
     3         <plugin>
     4             <artifactId>maven-compiler-plugin</artifactId>
     5             <configuration>
     6                 <source>1.6</source>
     7                 <target>1.6</target>
     8             </configuration>
     9         </plugin>
    10     </plugins>
    11 </build>
      maven-compiler-plugin类似于java project里面指定compile level;但是如果你使用maven进行编译打包,它的compile level是由maven-compiler-plugin来决定的。
      可选等同写法:
    1 <properties>
    2     <maven.compiler.target>1.6</maven.compiler.target>
    3     <maven.compiler.source>1.6</maven.compiler.source>
    4 </properties>
    参考:
    16. Java compiler level does not match the version of the installed Java project facet
      我的java版本是1.6,Dynamic Web module是2.3。
      在pom文件中添加maven-compiler-plugin插件(参见代码参见上面方案),maven -> update project,错误消失。
    17. MAVEN的工程引用和仓库引用
      如果maven的pom文件配置同一个eclipse workspace下面两个项目引用,要注意了,默认情况下被依赖的工程的所有pom重定义的jar包将会被设置为“export”;作为主工程会不由自主的增加很多自己的pom文件并未定义的jar,是的,他们来自于被依赖的工程;这里就有一个隐患,如果是在私有仓库的环境下,你打包并上传了,但是它的依赖可能并没有放到私有仓库里面;这里就有问题,其他工程引用了该jar包,因为不是工程引用,所以会出现jar包找不到的问题。你会奇怪,为什么我本地引用并不需要在pom文件中定义依赖,但是到了非工程依赖的情况下,就找不到类了,就是因为这个原因。
    18. maven工程生成source源码jar包
     1 <build>
     2     <plugins>
     3         <plugin>
     4             <groupId>org.apache.maven.plugins</groupId>
     5             <artifactId>maven-compiler-plugin</artifactId>
     6             <version>3.5.1</version>
     7             <configuration>
     8                 <source>${java.version}</source>
     9                 <target>${java.version}</target>
    10                 <testSource>${java.version}</testSource>
    11                 <testTarget>${java.version}</testTarget>
    12             </configuration>
    13         </plugin>
    14         <!--配置生成Javadoc包-->
    15         <plugin>
    16             <groupId>org.apache.maven.plugins</groupId>
    17             <artifactId>maven-javadoc-plugin</artifactId>
    18             <version>2.10.4</version>
    19             <configuration>
    20                 <encoding>UTF-8</encoding>
    21                 <aggregate>true</aggregate>
    22                 <charset>UTF-8</charset>
    23                 <docencoding>UTF-8</docencoding>
    24             </configuration>
    25             <executions>
    26                 <execution>
    27                     <id>attach-javadocs</id>
    28                     <goals>
    29                         <goal>jar</goal>
    30                     </goals>
    31                 </execution>
    32             </executions>
    33         </plugin>
    34         <!--配置生成源码包-->
    35         <plugin>
    36             <groupId>org.apache.maven.plugins</groupId>
    37             <artifactId>maven-source-plugin</artifactId>
    38             <version>3.0.1</version>
    39             <executions>
    40                 <execution>
    41                     <id>attach-sources</id>
    42                     <goals>
    43                         <goal>jar</goal>
    44                     </goals>
    45                 </execution>
    46             </executions>
    47         </plugin>
    48     </plugins>
    49 </build>
     
     
     
  • 相关阅读:
    CodeCraft-19 and Codeforces Round #537 (Div. 2) C. Creative Snap
    51nod 1007正整数分组(01背包变形)
    51nod 1007正整数分组(01背包变形)
    Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array
    Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array
    小a与星际探索
    小a与星际探索
    poj3764
    心理博弈
    4级
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7093094.html
Copyright © 2011-2022 走看看