您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
05-maven依赖管理&依赖范围
发布时间:2024-11-17 21:20:45编辑:雪饮阅读()
dependency的智能提示
在pom中的dependency中如果通过坐标groupId、artifactId、version等来定义依赖时候,有时候这三种信息你可能都只知道个大概,那么你只需要输入局部关键字就能给你自动补全可选项供你选择,例如这里mysql驱动依赖的版本号我只知道大概是5.xxx我就输入5,自动有下拉选择了,这种提示必须是之前你的本地仓库中有存储的。
查找坐标
如果本地仓库也没有的依赖,那么你可以去maven官方仓库的web界面去搜索
https://mvnrepository.com
搜到后进入详情页的某个依赖的某个版本里面的版本详情页在Maven里面就给你一份完整的依赖信息如
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.1.0</version>
</dependency>
依赖的同步
如果你修改了依赖后,想要同步去同步依赖的改变,可以点击当前pom文件中右上角悬停的maven的刷新图标。否则它可能是groupId、artifactId,version是红色的,红色代表当前仓库中符合该依赖条件的groupId或artifactId或version是没有的。
刷新后就不是红色了。
同样的你删除了一个坐标,那么在External Libraries中也不会立马移除,也是需要按刷新按钮的。
那么其实也可以配置为自动刷新,在主菜单里面File=》Settings=>Build,Execution,Deployment=>Build Tools里面勾选Any changes然后Apply即可。
查找坐标(本地仓库)并自动填写于pom
明确知道自己本地仓库有某个依赖的情况下
alt+insert(如果是笔记本有的键盘有fn的情况下,还要组合fn键)
会产生一个Generate的界面在这里是个列表,选择Dependency进入Search For Arfifact里面输入坐标关键字,然后搜索结果中选中你要的依赖然后选择版本后Add于自己的pom中。
依赖范围
通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境,测试环境,运行环境
例如
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
依赖范围有:
compile:编译classpath有效,测试classpath有效,运行classpath有效,例如logback
test:测试classpath有效,例如Junit
provided:编译classpath有效,测试classpath有效,例如servlet-api
runtime:测试classpath有效,运行classpath有效,l例如jdbc驱动
system:编译classpath有效,测试classpath有效,例如存储在本地的jar包
import:引入DependencyManagement(这个暂时先不管)
那么默认没有填写scope时候,scope是compile。
那么编译环境指的是src/main/里面的java类,而测试环境指的是src/test下面的java类。
比如
建立于main/java/com/jdbc.java如
package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbc {
public static void main(String[] args) throws SQLException {
String url="jdbc:mysql://192.168.217.132/demo?useSSL=false";
String username="demo";
String password="xy220807";
Connection conn= DriverManager.getConnection(url,username,password);
System.out.println("conn:"+conn);
}
}
而建立于test/java/com/下面的TestJdbc.java如
package com;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestJdbc {
@Test
public void test1() throws SQLException {
String url="jdbc:mysql://192.168.217.132/demo?useSSL=false";
String username="demo";
String password="xy220807";
Connection conn= DriverManager.getConnection(url,username,password);
System.out.println("conn:"+conn);
}
}
当运行jdbc.java中的main方法时候就会报错如:
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://192.168.217.132/demo?useSSL=false
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.jdbc.main(jdbc.java:13)
而运行TestJdbc.java中的test1方法时候就不报错,正常输出如:
conn:com.mysql.jdbc.JDBC4Connection@2280cdac
provided依赖范围有点特殊,它是对编译环境,测试环境有效,对运行环境无效。
但这个要从打包中看出来,所以比如前番中导入的那个web-demo项目的pom中我们配置mysql坐标如
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
<scope>provided</scope>
</dependency>
坐标同步后,我们清理下target然后运行maven的package命令后我们打开如
D:\os\web-demo\target路径中复制web-demo-1.0-SNAPSHOT.war并修改后缀为zip然后解压发现里面的WEB-INF\lib目录里面本应该有的mysql-connector-java-5.1.32.jar就没有了。
关键字词:maven,依赖