zoukankan      html  css  js  c++  java
  • maven项目部分知识

    1.maven项目在pom.xml中用add dependencies加入jar包,搜索不到jar包的解决方案:

    Window  --> Show View --> Other
    输入maven
    点击选择 Maven Repositories 
    右键点击 local repository 选择go into
    再对 local repository 选择Rebulid Index即可

    另附:pom.xml下面几个选项的意义:

    Overview:显示maven项目的一些基本信息.
    Dependencies:添加jar包的页面,很重要!
    Plugins:添加maven插件的页面.比如tomcat-maven-plugin等.
    Dependency Hierarchy:用于显示jar包的依赖关系.没事的时候可以看看jar包的依赖关系.
    Effective POM:显示maven的编译路径,plugin之类的.可以无视.
    pom.xml:导入jar包的信息,可以在其中进行修改.重要

    2.Dependency scope 是用来限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态。

    自从2.0.9后,新增了1种,现在有了6种scope:

        compile
        默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布
        provided
        跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。        
        runtime
        表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。
        test
        表示dependency作用在测试时,不作用在运行时。 只在测试时使用,用于编译和运行测试代码。不会随项目发布。
        system
        跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
        <project>
    ...
    <dependencies>
      <dependency>
       <groupId>javax.sql</groupId>
       <artifactId>jdbc-stdext</artifactId>
       <version>2.0</version>
       <scope>system</scope>
       <systemPath>${java.home}/lib/rt.jar</systemPath>
      </dependency>
    </dependencies>
    ...
    </project>

    3.运用maven整合velocity 出现异常:
    java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

    出现原因:一种说法:pom.xml文件里面有引入servlet-api.jar 而tomcat下面也有这个包,造成jar包冲突导致的(http://eryk.iteye.com/blog/627761)

    解决这个问题的方法就是

    对于servlet-ap.jar 使用 <scope>标签,编译的时候用到servlet-api和jsp-api,但在打包的时候不用这两个依赖

    如下<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.4</version>
        <scope>provided</scope>
       </dependency>

    这样修改后,servlet-api.jar就不会在运行tomcat时被import进去了,不会与tomcat自带的servlet-api有冲突

    我试了下,对于我这个项目,没有效果,依旧这个错误

     

    另外一种说法:在用maven的时候,经常会遇到依赖重复的问题 ,如果要是依赖多个servlet-api.jar ,代码加载的时候就会报上面错误(http://blog.csdn.net/bbsnba123/article/details/8669191),所以就需要去除,重复的依赖.在eclipse中maven插件中,可以看到依赖重复的位置。打开pom文件,点击Dependency Hierarchy标签。

    打开pom文件,在依赖中,加入exclusion标签

     

    1. <dependency>  
    2.             <groupId>org.apache.velocity</groupId>  
    3.             <artifactId>velocity-tools</artifactId>  
    4.             <version>2.0</version>  
    5.             <exclusions>  
    6.                 <exclusion>  
    7.                     <groupId>javax.servlet</groupId>  
    8.                     <artifactId>servlet-api</artifactId>  
    9.                 </exclusion>  
    10.             </exclusions>  

    用此方法,还是报错。

    最后,综上两种原因,解决方法如下:

     <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
            <type>jar</type>
            <scope>compile</scope>
            <exclusions><!-- 去除依赖重复 -->
                <exclusion>
                    <artifactId>struts-core</artifactId>
                    <groupId>org.apache.struts</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>struts-taglib</artifactId>
                    <groupId>org.apache.struts</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>struts-tiles</artifactId>
                    <groupId>org.apache.struts</groupId>
                </exclusion>
                <exclusion>  
                    <groupId>javax.servlet</groupId>  
                    <artifactId>servlet-api</artifactId>  
                </exclusion>
            </exclusions>
        </dependency>
        
            <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <type>jar</type>
            <scope>provided</scope><!--使用 <scope>标签,编译的时候用到servlet-api和jsp-api,但在打包的时候不用这两个依赖-->
        </dependency>
  • 相关阅读:
    CF1329A Dreamoon Likes Coloring(贪心)
    CF1330B Dreamoon Likes Permutations
    AcWing338 计数问题(数位dp)
    AcWing311 月之谜(数位dp)
    AcWing310 启示录(数位dp)
    CF1332E Height All the Same(数学)
    CF1332D Walk on Matrix(构造)
    CF1332C K-Complete Word(思维)
    js作用域
    js原型链笔记
  • 原文地址:https://www.cnblogs.com/cuiyf/p/3362227.html
Copyright © 2011-2022 走看看