maven项目通常哪些依赖需要加<scope>?

哪些依赖是必须加<scope></scope>标签的?哪些是可加可不加的?runtime和compile都什么区别?

阅读 2.4k
2 个回答
新手上路,请多包涵

Runtime
Runtime,运行时,顾名思义,就是程序的运行阶段。在计算机科学中,运行时是计算机程序生命周期的最后一个阶段,在这个阶段,代码被编译成机器码的形式在CPU上运行。

Compile-time
Compile-time,编译时。指的就是程序代码被转化为机器码的那个阶段,通常发生在运行时之前。

Runtime 和 Compile-time的区别
可以从编译时和运行时分别会发生的错误来感受它们的区别。编译时会发生的错误:语法错误,类型检查错误,编译器崩溃。运行时会发生的错误:被0除,空指针,内存不足,试图打开不存在的文件等。

可以从成功编译和成功运行来感受它们的区别。成功编译表明程序是良构的,接下来可以运行这个程序。成功运行表明这个程序没有出问题的被运行。

可以从他们的输入输出来进行区别。编译时的输入是源代码以及一些被需要的头文件和库等;输出可能是汇编代码或可重定位目标代码,甚至是可执行程序,或者如果出现问题,输出是一堆错误信息。运行时输入输出则完全由程序决定,文件、网络数据包等都可以作为输入;让程序发射导弹,这也算一个输出。

举个例子。

编译时:

string my_value = Console.ReadLine();
int i = my_value;
string类型的值不能直接赋给int类型,所以编译会报错。

运行时:

string my_value = Console.ReadLine();
int i = int.Parse(my_value);
运行时会不会报错就完全取决于输入什么值,是不是可以转化为int。

比如你要把项目打成一个war包放在tomcat上,那么我们在本地开发时由于需要tomcat的一些依赖,就需要把这些依赖设置为<scope>runtime</scope>,表示在本地运行的时候引入这些依赖,但是在打包的时候不需要引入,因为生产环境的tomcat本身已经有这些依赖

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题