maven的scope作用域,maven中的scope标签作用

  maven的scope作用域,maven中的scope标签作用

  00-1010 maven中的作用域概述& lt范围& gt参数& lt/scope & gt;在Maven中解决Maven项目无法打包生成空文件夹的问题。

  

目录

 

  

Maven中的scope总结

接下来分别介绍下这几种scope:

 

  如果compile未声明scope元素,则为默认值;Compile是指依赖包需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一种强依赖;包装的时候,一般都需要包含。

  providedprovided type的范围仅在项目的编译和测试阶段有效;可以认为目标容器中已经提供了这种依赖,不需要再提供,但是在编写代码或者编译的时候可能会用到;依赖项不会被分解到项目jar包中。

  说到提供,这是依赖项下可选的子标签。如果dependent optional设置为true,则封装时不会将依赖关系记入jar包,也不会通过依赖关系转移传递给依赖该项目的项目;例如:x

  B,B依赖A(x-B-A),那么A中optional设置为true的依赖不会传递给x。

  这两者的区别在于:

  1.如果optional为true,则依赖项是可选的,是否使用依赖项不会影响服务操作;

  2.所提供的范围已经在目标容器中提供了此依赖项,因此不需要在

  Runtime类似于compile,但区别在于Runtime跳过了编译阶段,通常需要在打包时包含。

  一般编译和运行时不需要测试。它们只在测试编译和运行时阶段可用,不会打包到项目jar包中。同时,如果项目A依赖于项目B,则项目B中测试范围下的依赖关系不会被继承。

  System是指使用本地systemPath下的jar包,需要和一个系统路径一起使用,如下:

  !-reference-dependencygroupid xxxx/groupidartifidxxx/artifidsystempath $ { basedir }/lib/

  t -->                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-dependencies</artifactId>                 <version>2.0.1.BUILD-SNAPSHOT</version>                 <type>pom</type>                 <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。如果要继承多个,可以在dependencyManagement中添加,如:

  

     <dependencyManagement>         <dependencies>             <!-- Override Spring Data release train provided by Spring Boot -->             <dependency>                 <groupId>org.springframework.data</groupId>                 <artifactId>spring-data-releasetrain</artifactId>                 <version>Fowler-SR2</version>                 <type>pom</type>                 <scope>import</scope>            </dependency>            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-dependencies</artifactId>                <version>2.0.1.BUILD-SNAPSHOT</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>

 

  

Maven中<scope>参数</scope>配置

参数名称具体功能<scope>compile</scope>默认值,表示当前依赖包要参与当前项目的编译后续测试运行时打包<scope>provided</scope>当前包只在编译和测试的时候使用,而不再后续的运行和打包的时候不会打包进来<scope>test</scope>表示当前依赖包只参与测试工作<scope>runtime</scope>表示当前依赖包只参与运行周期,其他跳过<scope>system</scope>从参与度和provided一致,不过被依赖项不会从maven远程仓库下载,而是从本地的系统拿。需要systemPath属性来定义路径

 

  

解决maven项目中无法打包生成空文件夹的问题

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.1</version> <executions> <!-- Run shade goal on package phase --> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <exclude>org.apache.flink:force-shading</exclude> <exclude>com.google.code.findbugs:jsr305</exclude> <exclude>org.slf4j:*</exclude> <exclude>org.apache.logging.log4j:*</exclude> </excludes> </artifactSet> <filters> <filter> <!-- Do not copy the signatures in the META-INF folder. Otherwise, this might cause SecurityExceptions when using the JAR. --> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.lkr.flink.StreamingJob</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>

 

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: