重点:这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录 scope=compile(默认) ​ 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个jar包在classpath中. ​ 当我们用maven install生成最终的构件包ProjectABC.war后,在其下的WEB-INF/lib中,会包含我们被标…
问题再现: 上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: <dependency> <groupId>com.liferay.portal</groupId> <artifactId>portal-impl</artifactId> <version>6.1.0</version> <…
解释 其实这个问题很简单. 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact(模块)对应的jar包在classpath中. 而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact.换句话说,它只影响到编译,测试阶段.在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)…
问题再现 上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是provided的情况,比如如下: <dependency> <groupId>com.liferay.portal</groupId> <artifactId>portal-impl</artifactId> <version>6.1.0</version> <scope>provided</scope&…
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project triage: Compilation failure[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?…
Maven项目中,为了保持引用依赖的一致性,一般会抽出一个parent层,用来管理子项目的maven依赖,对于依赖的管理有两种方式,分别是dependencies以及dependencyManagement,那么这两者有什么区别呢? 区别 两者都可以引入maven依赖,但是主要的区别有以下几点: dependencyManagement引入的依赖在子项目中不会自动引入 使用dependencyManagement在parent中引入的依赖只是对依赖进行了一个声明,在子项目中需要使用相应的依赖时还…
Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM crash错误,原因是test代码提交上去了,但没有对应的junit包导致的 解决办法:1.服务器上编译的时候排除掉test代码.2.把<scope>test</scope>改成<scope>compile</scope> <dependency> &l…
身边有几位刚使用Maven的同学表示——在一个叫"pom.xml"的文件里声明一个依赖就不用去手动添加jar了,感觉这东西和自己手动管理依赖没太大区别. 当然,并不是这样,在此记录dependency那些事儿. dependency 一个依赖可以按照maven的坐标标准进行定义. 比如: <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api&…
Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了.今天梳理一下maven的scope. scope定义了类包在项目的使用阶段.项目阶段包括: 编译,运行,测试和发布. scope的分类 compile 默认就是compile,什么都不配置也就是意味着compile.compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与…
 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有阶段,会随着项目一起发布.     * provided,类似compile,期望JDK.容器或使用者会提供这个依赖.如servlet.jar.     * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段.     * test,只在测试时使用,用于编译和运行测试代码.不会随项目发布.  …