gradle dependencyManagement内dependency会使用引入jar吗
时间: 2024-08-15 18:00:58 浏览: 48
在Gradle构建工具中,`dependencyManagement`块主要用于管理项目的依赖关系,它定义了项目依赖的一些共性配置,如版本范围、仓库等。当你在`dependencies`块中引用`dependencyManagement`里定义的依赖时,实际上并不会直接下载并引入这些库的JAR文件到项目的构建路径(`build/libs/`或`build/distributions/`)。
`dependencyManagement`的主要作用是统一管理依赖项版本,方便团队协作,并且可以避免由于各模块分别声明依赖导致的版本冲突。当你需要使用这些依赖时,Gradle会在编译期间依据这些定义自动处理依赖的获取和版本协调。
当项目真正运行或打包时,Gradle会根据`dependencies`块的指令来下载具体的依赖JAR,并将它们包含在最终的可执行包或部署目录中。
相关问题
idea项目pom文件中引入jar包,出现了多个一样版本的jar包,并且使用了其他jar包
出现多个一样版本的jar包通常是由于项目中依赖的其他jar包引入了不同版本的同一jar包,你可以使用IDE的依赖分析工具,比如Maven Dependency Plugin或者IDEA自带的Dependency Analyzer来查找冲突的依赖。
如果你发现有重复的依赖,你可以使用Maven Dependency Management或者Gradle Dependency Management来解决冲突。在你的项目的pom文件中,你可以指定你需要的依赖,以及该依赖的版本号和范围,比如:
```xml
<dependency>
<groupId>com.example</groupId>
<artifactId>example-lib</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
```
在这个例子中,我们指定了com.example:example-lib:1.0.0这个依赖,它的范围为compile,也就是在编译和运行时都需要这个依赖。如果你有多个依赖需要同一个jar包,你可以在你的pom文件中指定一个dependencyManagement元素,来指定这个jar包的版本号和范围:
```xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>example-lib</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>example-lib2</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
```
在这个例子中,我们指定了com.example:example-lib和com.example:example-lib2这两个依赖的版本号和范围都为1.0.0和compile。这样,当你在你的项目中引入这两个依赖时,默认会使用指定的版本号和范围。
使用gradle进行springboot的多模块开发,每个模块都单独打包成独立的jar,只有主模块有main方法,在运行时候以lib形式引用子模块,如何配置?
对于使用Gradle进行SpringBoot多模块开发,每个模块都单独打包成独立的jar,只有主模块有main方法,在运行时候以lib形式引用子模块,可以按照以下步骤进行配置:
1.在主模块(也是有main方法的模块)的build.gradle文件中,添加如下配置:
```
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group 'com.example'
version '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation project(':module1')
implementation project(':module2')
}
bootJar {
baseName = 'main-module'
}
jar {
manifest {
attributes 'Main-Class': 'com.example.MainApplication'
}
}
```
其中,implementation project(':module1')和implementation project(':module2')表示引入子模块1和子模块2,baseName = 'main-module'表示打包后的jar文件名为main-module.jar。
2.在子模块的build.gradle文件中,添加如下配置:
```
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group 'com.example'
version '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// 其他依赖
}
bootJar {
baseName = '子模块名'
}
jar {
enabled = true
}
```
其中,implementation 'org.springframework.boot:spring-boot-starter-web'和其他dependencies表示子模块的依赖,baseName = '子模块名'表示打包后的jar文件名为子模块名.jar。
3.使用Gradle命令进行打包,在主模块的根目录下执行以下命令:
```
./gradlew clean bootJar
```
执行后,会在主模块的build/libs目录下生成main-module.jar文件,同时在子模块的build/libs目录下生成子模块的jar文件。
4.在运行时以lib形式引用子模块,可以在主模块的运行脚本中添加如下配置:
```
java -cp main-module.jar:module1.jar:module2.jar com.example.MainApplication
```
其中,main-module.jar是主模块的jar文件名,module1.jar和module2.jar是子模块的jar文件名,com.example.MainApplication是主模块中的main方法所在的类。这样就可以在运行时以lib形式引用子模块了。
阅读全文