maven依赖中的type和scope

无法更新私服中最新的snapshot包:

mvn clean install package -U -DskipTests=true

另外,如果本地启动了多个服务,jar包被被的启动工程使用的时候,此时无法更新到最新包。最好把服务全停了,再更新报错的工程。(我是这么处理成功的)

maven打包为jar

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.3.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

type定义引入包的方式

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-dependencies</artifactId>
	<version>${spring-boot.version}</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>

type默认是jar, 可以改成war ,这两种比较常用;

这里我们说下pom,当需要引入很多依赖的时候,pom.xml文件会过大,我们可以通过依赖一个父项目来解决这个问题,但也可能导致府项目pom.xml文件过大,所以最终的方法是type改成pom方式,即把很多jar包打包到一个pom中,我们依赖了pom,就可以下载所有的jar包。

 

scope控制 dependency 元素的使用范围

compile(默认)

如果没有指定scope,那么该元素的默认值为compile。被依赖项目需要参与到项目的编译、测试、打包、运行等阶段,打包时通常会包含被依赖项目,是比较强的依赖。
provided

被依赖项目理论上可以参与到项目的编译、测试、运行等阶段,当时在打包时进行了exclude动作。
应用场景:例如我们在开发一个web项目,在编译的时候我们需要依赖servlet-api.jar,但在运行时我们不需要这个jar,因为它已由应用服务器提供,这是我们就需要用provided来修饰这个依赖包。
runtime

顾名思义,表示该依赖项目无需参与到项目的编译,但会参与到测试与运行阶段。
应用场景:例如在编译时我们不需要JDBC API的jar,但在运行时才需要JDBC的驱动包。
test

表示该依赖项目仅会参与到项目的测试阶段。
应用场景:例如,Junit 测试。
system

与provided类似,但是被依赖项不会从maven仓库查找依赖,而是从本地系统中获取,systemPath元素用于指定依赖在系统中jar的路径。
 

<dependency>
    <groupId>com.cjf</groupId>
    <artifactId>auth-center</artifactId>
    <version>1.5</version>
    <scope>system</scope>
    <systemPath>${basedir}/MyContent/WEB-INF/lib/auth-center.jar</systemPath>
</dependency>

import

它只使用在dependencyManagement中,我们知道maven和java只能单继承,作用是管理依赖包的版本,一般用来保持当前项目的所有依赖版本统一。
例如:项目中有很多的子项目,并且都需要保持依赖版本的统一,以前的做法是创建一个父类来管理依赖的版本,所有的子类继承自父类,这样就会导致父项目的pom.xml非常大,而且子项目不能再继承其他项目。

import为我们解决了这个问题,可以把dependencyManagement放到一个专门用来管理依赖版本的pom中,然后在需要用到该依赖配置的pom中使用scope import就可以引用配置。例如:
 

<project>
    <modelVersion>1.0.0</modelVersion>
    <groupId>com.cjf.test</groupId>
    <artifactId>base-parent</artifactId>
    <packaging>pom</packaging>          <!--注意这里是pom-->
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <junit.version>4.8.2</activemq.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactid>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactid>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

 

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值