- 浏览: 633805 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (820)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (10)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
问题再现:
上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下:
他们问我scope在何种情况下要设置为provided,以及和scope设置为compile的区别。
解释:
其实这个问题很简单。
对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。
而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。换句话说,它只影响到编译,测试阶段。在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包,所以无需我们这个artifact对应的jar包了。
听起来很玄乎,对吧,其实一点也不难理解。举个scope=provided的例子。
比如说,假定我们自己的项目ProjectABC 中有一个类叫C1,而这个C1中会import这个portal-impl的artifact中的类B1,那么在编译阶段,我们肯定需要这个B1,否则C1通不过编译,因为我们的scope设置为provided了,所以编译阶段起作用,所以C1正确的通过了编译。测试阶段类似,故忽略。
那么最后我们要吧ProjectABC部署到Liferay服务器上了,这时候,我们到$liferay-tomcat-home\webapps\ROOT\WEB-INF\lib下发现,里面已经有了一个portal-impl.jar了,换句话说,容器已经提供了这个artifact对应的jar,所以,我们在运行阶段,这个C1类直接可以用容器提供的portal-impl.jar中的B1类,而不会出任何问题。
实际插件的行为:
刚才我们讲述的是理论部分,现在我们看下,实际插件在运行时候,是如何来区别对待scope=compile和scope=provided的情况的。
做一个实验就可以很容易发现,当我们用maven install生成最终的构件包ProjectABC.war后,在其下的WEB-INF/lib中,会包含我们被标注为scope=compile的构件的jar包,而不会包含我们被标注为scope=provided的构件的jar包。这也避免了此类构件当部署到目标容器后产生包依赖冲突。
参考:http://supercharles888.blog.51cto.com/609344/981316/
上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下:
<dependency> <groupId>com.liferay.portal</groupId> <artifactId>portal-impl</artifactId> <version>6.1.0</version> <scope>provided</scope> </dependency>
他们问我scope在何种情况下要设置为provided,以及和scope设置为compile的区别。
解释:
其实这个问题很简单。
对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。
而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。换句话说,它只影响到编译,测试阶段。在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包,所以无需我们这个artifact对应的jar包了。
听起来很玄乎,对吧,其实一点也不难理解。举个scope=provided的例子。
比如说,假定我们自己的项目ProjectABC 中有一个类叫C1,而这个C1中会import这个portal-impl的artifact中的类B1,那么在编译阶段,我们肯定需要这个B1,否则C1通不过编译,因为我们的scope设置为provided了,所以编译阶段起作用,所以C1正确的通过了编译。测试阶段类似,故忽略。
那么最后我们要吧ProjectABC部署到Liferay服务器上了,这时候,我们到$liferay-tomcat-home\webapps\ROOT\WEB-INF\lib下发现,里面已经有了一个portal-impl.jar了,换句话说,容器已经提供了这个artifact对应的jar,所以,我们在运行阶段,这个C1类直接可以用容器提供的portal-impl.jar中的B1类,而不会出任何问题。
实际插件的行为:
刚才我们讲述的是理论部分,现在我们看下,实际插件在运行时候,是如何来区别对待scope=compile和scope=provided的情况的。
做一个实验就可以很容易发现,当我们用maven install生成最终的构件包ProjectABC.war后,在其下的WEB-INF/lib中,会包含我们被标注为scope=compile的构件的jar包,而不会包含我们被标注为scope=provided的构件的jar包。这也避免了此类构件当部署到目标容器后产生包依赖冲突。
参考:http://supercharles888.blog.51cto.com/609344/981316/
发表评论
-
SpringBoot创建maven多模块项目实战代码
2022-05-10 10:49 141SpringBoot创建maven多模块项目实战代码 -
Maven依赖分析,jar包冲突解决利器intellij idea插件Maven Helper强烈建议安装
2021-09-10 13:49 286Maven Helper插件 maven scope pro ... -
dependencies与dependencyManagement的区别
2017-12-13 18:52 523dependencies与dependencyManageme ... -
Eclipse m2e pom报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache
2017-05-08 17:35 1464Eclipse Maven pom报错: org.apache ... -
Linux下搭建maven私服nexus3.x
2017-04-16 14:06 551http://blog.csdn.net/sinat_3401 ... -
maven-deploy失败
2017-02-20 14:59 1355昨天遇到的问题,mavne项目执行deploy的时候,出错。提 ... -
使用maven插件对java工程进行打包
2016-12-22 14:28 352参考: http://chenzhou123520.iteye ... -
maven-shade-plugin
2016-12-22 11:26 645使用插件maven-shade-plugin,非常好用 使用插 ... -
Maven最佳实践-distributionManagement
2016-10-27 16:45 2022分发构件至远程仓库 mvn ... -
maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
2016-10-27 16:34 1812eclipse中使用clean deploy 命令,将本地文件 ... -
将本地文件推送到nexus中心库
2016-10-25 17:02 447http://blog.csdn.net/aline200/a ... -
MAVEN 工程打包resources目录外的更多资源文件
2016-10-25 14:36 466参考:http://blog.csdn.net/u012849 ... -
解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
2016-09-26 10:22 600jdk.tools:jdk.tools是与JDK一起分发的一个 ... -
target\m2e-wtp\web-resources\META-INF\MANIFEST.MF (系统找不到指定的路径)
2016-09-12 09:12 1795业务需求:在清除了本地仓库之后又重新拷贝了一下报错:H:\ta ... -
解决Maven报Plugin execution not covered by lifecycle configuration
2016-09-08 10:02 588参考:http://blog.csdn.net/xxd8511 ... -
web.xml is missing and <failOnMissingWebXml> is set to true
2016-09-06 19:02 747在学习maven模块化构建项目的时候遇到了如下报错信息: w ... -
使用Nexus搭建Maven私服
2016-07-17 17:13 364为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给 ... -
maven--私服的搭建
2016-07-17 16:58 1039maven--私服的搭建(Nexus的使用)和注意的问题 私 ... -
maven exclusions【jar包依赖注意】
2016-05-20 15:24 896<dependency> & ...
相关推荐
**Maven的Dependency测试**...总之,Maven的Dependency测试是Java开发中至关重要的部分,通过合理地配置和管理依赖,可以保证项目的稳定性和可维护性。了解和掌握这些知识,对于提升开发效率和团队协作有着积极的影响。
本文将深入探讨"Maven中scope test的使用以及依赖继承传递"这一主题,帮助开发者更好地理解和应用Maven的核心特性。 首先,`scope test`是Maven依赖管理中的一个关键概念。当我们在`pom.xml`文件中为某个依赖设置`...
`<scope>provided</scope>`是Maven中的一种依赖范围,它主要用于那些由JDK或者应用服务器提供的库,比如Servlet API和其他Java EE相关的API。使用`<scope>provided</scope>`表明Maven在编译和测试期间会使用这些依赖...
在Maven项目管理中,`scope`依赖范围是至关重要的概念,它决定了一个依赖在项目的不同阶段如何被引入和使用。Maven有多种scope类型,每个类型都有特定的适用场景和目的,帮助开发者精确控制项目的依赖关系。 1. **...
scope定义了依赖项的使用范围,主要有以下几个选项:compile、provided、runtime和test。compile表示依赖项在编译时需要,provided表示依赖项在编译和测试时需要,但运行时不需要。runtime表示依赖项在运行时需要,...
在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。 • src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个...
<scope>provided</scope> </dependency> <!-- 添加其他依赖 --> ... ``` ### 四、编写Web应用 在`src/main/java`下创建你的Java类,例如Servlet,实现业务逻辑。在`src/main/webapp/WEB-INF`下编写`web.xml`...
<scope>provided</scope> </dependency> ``` 构建过程可以通过Maven命令行完成,如`mvn clean compile`用于清理项目并编译源代码,`mvn package`会打包成war文件。Maven的生命周期有许多阶段,如validate、...
Maven 是一个强大的构建工具,主要用于管理 Java 项目的构建、依赖和文档生成。以下是一些 Maven 的常用命令,它们可以帮助开发者更有效地操作项目。 1. **显示插件的所有 Goal** 使用 `mvn help:describe -...
- Maven 的依赖范围包括 compile、test、provided、runtime、system 和 import。 - 不同的依赖范围决定了该依赖是否会被包含在最终的构建产物中。 8. **排除依赖** - Maven 允许在 POM 文件中使用 exclusions ...
Maven的默认生命周期包括编译(compile)、测试(test)、打包(package)、验证(verify)、安装(install)和部署(deploy)。对于JavaWeb项目,我们主要关注`package`阶段,Maven会将项目打包成WAR文件,可以...
3. **依赖管理(Dependency Management)**:Maven通过POM自动管理项目的依赖库,只需在POM中声明依赖,Maven会自动下载并解决依赖关系。 4. **生命周期(Lifecycle)**:Maven有三个主要生命周期:clean、default...
9. **依赖范围(Dependency Scope)**:Maven允许为每个依赖指定范围,如编译(compile)、测试(test)、运行时(runtime)、提供(provided)、系统(system)。不同范围决定了依赖在哪些构建阶段可用。 10. **...
Maven是一款由Apache组织开发的项目管理和整合工具。它可以帮助开发者轻松地管理项目的构建、依赖关系以及文档等。Maven的核心优势在于它能够自动化构建过程,并且通过预定义的生命周期来规范项目的构建流程。 ### ...
<scope>provided</scope> </dependency> ``` - **清理、编译和安装项目**:执行 Maven 命令 `mvn clean compile install` 来完成项目的清理、编译和安装。 #### 三、Maven 生成 Eclipse 项目 **1. 导入 ...
这里的`<scope>provided</scope>`表示Servlet API已经在服务器环境中提供,因此在打包时不需要包含。 【 Maven 的构建过程】 Maven有三个主要的生命周期阶段:compile、test和package。在Servlet3.1项目中,这些...
**Maven的依赖范围(Dependency Scope):** 1. `compile`:默认范围,编译时可用,打包时包含。 2. `test`:测试范围,仅在测试时可用,打包时不包含。 3. `runtime`:运行时范围,运行和测试时可用,打包时不包含...
Maven是Java开发中的一款项目管理和综合工具,由Apache软件基金会开发。它通过提供一套标准的构建过程和依赖管理机制,简化了项目的构建、测试、部署等生命周期管理。本教程将深入探讨Maven的核心概念和使用技巧,...
- 依赖范围(Scope):如编译(compile)、测试(test)、运行时(runtime)、提供者(provided)、系统(system)等,不同范围的依赖在不同阶段发挥作用。 - 面向Profile的构建:通过定义不同环境的配置...