maven scope runtime
阿新 • • 發佈:2019-02-03
今天在看同事程式碼的時候看到了這樣的寫法:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
<scope>runtime</scope>
</dependency>
不明白<scope>runtime</scope>的意思,查了一下
There are 6 scopes available:
- compile
This is the default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects. - provided
This is much like compile , but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided - runtime
This scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath. - test
This scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases. - system
This scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository. - import (only available in Maven 2.0.9 or later)
This scope is only used on a dependency of type pom in the <dependencyManagement> section. It indicates that the specified POM should be replaced with the dependencies in that POM's <dependencyManagement>section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.
這是在xml中的配置
<bean id="jade.dataSource.worldcup" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://10.3.20.118:3306/worldcup"></property>
<property name="username" value="worldcup"></property>
<property name="password" value="geed2014"></property>
</bean>
由於還在測試別的功能的階段,還沒有編寫mysql,所以編譯的時候不會用到這個包。但是生成Context上下文的時候會用到。 也就是說這個包mysql包編譯的時候是用不到的,但是在執行的時候會用到。所以如果我們在package的時候沒有將其打包到target中,執行時就會出錯。所以要加上
<scope>runtime</scope>
如果不加,我試驗過了。雖然加了這個依賴,但是由於編譯的時候沒有用到,那麼生成的target下的lib中是沒有對應的jar包的。