zoukankan      html  css  js  c++  java
  • & maven总结

    maven

    常用命令

    常见属性标签

    Scope

    scope定义了类包在项目的使用阶段。项目阶段包括:编译,运行,测试和发布
    scope属性说明

    • compile
      • 默认scope为compile,表示当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包时, 会打到包里面
    • test
      • 该依赖仅仅参与测试相关的内容,包括测试用例的编译和运行,比如定性的Junit
    • runtime
      • 依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。此类的驱动都是为runtime的类库。
    • provided
      • 该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。
    • system
      • 使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。
    • import
      • 这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。

    SystemPath

    当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径,例如:

    <dependency>
                <groupId>com.taobao</groupId>
                <artifactId>api</artifactId>
                <version>1.0</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/../rookie-system/src/main/resources/lib/taobao-sdk-java.jar</systemPath>
            </dependency>

    打jar包时,includeSystemScope 该标签项可以将外部引用包打包:

     <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <!--该配置项的作用是:打包外部jar (scope为system)-->
                    <!--
                        <dependency>
                            <groupId>com.taobao</groupId>
                            <artifactId>api</artifactId>
                            <version>1.0</version>
                            <scope>system</scope>
                            <systemPath>${project.basedir}/../rookie-system/src/main/resources/lib/taobao-sdk-java.jar</systemPath>
                        </dependency>
                    -->
                    <configuration>
                        <includeSystemScope>true</includeSystemScope>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    optional + Exclusions

    optional 可选依赖

    Exclusions 排除jar包

    Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反。
    Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。
    Exclusions则是主动排除子项目传递过来的依赖。

    用法区别
    应用场景:projectA 依赖projectB, projectB 依赖projectC时

    B pom.xml

    <project>
      ...
      <dependencies>
        <dependency>
          <groupId>sample.ProjectC</groupId>
          <artifactId>Project-C</artifactId>
          <version>1.0</version>
          <scope>compile</scope>
          <optional>true</optional>
        </dependency>
      </dependencies>
    </project>

    如上A依赖B,B依赖C用的true,这时C只能在B中使用,而不会主动传递到A中,A需要主动引用C才有B的依赖。

    如果B不用true引用C,则会传递到A中,
    **A如果不需要C则需要主动排除B传递过来的C。

    <dependencies>
        <dependency>
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
          <version>1.0</version>
          <scope>compile</scope>
          <exclusions>
            <exclusion>
              <groupId>sample.ProjectC</groupId>
              <artifactId>Project-C</artifactId>
            </exclusion>
          </exclusions> 
        </dependency>
    </dependencies>
  • 相关阅读:
    jquery动画效果---animate()--滚屏
    一个前端的自我修养
    开发和测试
    jquery.find()
    c99和c++11的差异之一
    容器经典图
    C/C++中的##用法
    【心学.悟道】千圣皆过影,良知乃吾师
    memcpy, memset代码改写的方式
    三大软件原则
  • 原文地址:https://www.cnblogs.com/doagain/p/14969007.html
Copyright © 2011-2022 走看看