maven scope属性值设置含义

1、枚举各个属性值的含义

compile,缺省值,适用于所有阶段,会打包进项目。

provided,类似compile,期望JDK、容器或使用者会提供这个依赖。

runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。

test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。

system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。




在使用benchmark时,报错:

运行的时候报了一个如下的错误:

Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList

at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)

at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:122)

at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:263)

at org.openjdk.jmh.runner.Runner.run(Runner.java:209)

at com.test.java8.LongAdderTest.main(LongAdderTest.java:27)


在pom.xml 里引入

<dependency>

<groupId>org.openjdk.jmh</groupId>

<artifactId>jmh-core</artifactId>

<version>1.21</version>

</dependency>

<dependency>

<groupId>org.openjdk.jmh</groupId>

<artifactId>jmh-generator-annprocess</artifactId>

<version>1.21</version>

<scope>provided</scope>

</dependency>

这里一定我注意,我解决的办法是上面的标红的scope 标签是provided 之前我填写的test一直报错!

provided,compile 都是可以的,但是这个包我们在生产中并不需要,一般写provided

scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行


这么说可能不是很好理解:换个简单的,就是你在把这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录