为什么maven对spring的依赖不像npm,pip那么简洁?

比如python里面要引入flask,只需要pip install flask就够了
php要用thinkphp也是直接compoer install top-think/thinkphp5就够了
npm要引入vue直接npm install vue --save就够了

而java的maven为什么不能直接依赖一个springframework就够了
就像这样

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>${spring.version}</version>
</dependency>

而是要依赖如下那么多包?
这是因为spring里面的每个功能都耦合度很低,所以可以灵活选择是否要使用的缘故吗?

<!-- 添加Spring依赖的jar包-->
<!--依赖注入包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--切片包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- Beans包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- 容器包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- 容器依赖包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- 核心包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- 表达式包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--spring-framework-bom包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-framework-bom</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--spring-instrument包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-instrument</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--连接数据库包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring消息包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring信息包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring对象映射包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--spring-oxm包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring测试包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring事物管理包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
<!--Spring文本项目包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>

————————————————
版权声明:本文为CSDN博主「陈小子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chentie...

阅读 5.9k
4 个回答

就是你说的那个原因。Spring工程很大,有个各自项目,适用于各种不同的场景。所以会分包成许多不同的包,你用到哪个功能就引入哪个依赖。

maven配上私服,用着也很爽啊。Maven比NPM老得多,拥有更大的用户群。

如果你想的话,当然可以只依赖一个springframework,实际上也没有任何人逼你强行用spring全家桶,只不过spring全家桶集成度高,用起来方便而已。而为了降低耦合度,让大家各取所需,只用自己需要的,所以spring拆成那么多子项目。

反过来说spring把自己打包成一个巨型大项目,到时候又有人说为什么spring这么臃肿,不能分成一堆子项目想用啥用啥?

如果你用flask的话很可能需要另外一些插件,到时候也得引用一堆flask-XXX,这就和spring一样了。

其实就是项目大,分了许多包而已。
其实最坑爹的是pip,都装在系统目录。很容易冲突,而且移不动(从一个电脑到另一个电脑)。

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