gradle build不会单独编译出内部类而gradle bootJar里面的class内部类是单独的文件
时间: 2024-04-29 08:21:35 浏览: 11
是的,这是因为 Gradle 在编译 Java 代码时,默认会将内部类(包括匿名内部类)编译为与外部类在同一个 .class 文件中,而在生成 bootJar 时,Spring Boot 会使用 Spring Boot Plugin 提供的 bootJar 任务来重新打包应用,该任务会将所有的 .class 文件重新打包为一个 jar 文件,并且会将内部类编译为单独的 .class 文件,即使在使用 Gradle 进行编译时,内部类也会被单独编译出来。
这样做的目的是为了确保应用在运行时能够正确加载所有的 .class 文件,从而避免出现类加载异常等问题。因此,在使用 Gradle 和 Spring Boot 开发应用时,需要注意这种编译和打包方式的差异,以避免出现不必要的问题。
相关问题
gradle build不会单独编译出内部类而boot jar里面的class内部类是单独的文件
是的,这是因为 Gradle 在编译 Java 代码时,默认会将内部类(包括匿名内部类)编译为与外部类在同一个 .class 文件中。这种做法可以减少 .class 文件的数量,但也会对代码的可读性和维护性造成一定的影响。
而在生成 boot jar 时,Spring Boot 会使用 Spring Boot Plugin 提供的 BootRepackage 任务来重新打包应用,该任务会将所有的 .class 文件重新打包为一个 jar 文件,并且会将内部类编译为单独的 .class 文件。这样做的目的是为了确保应用在运行时能够正确加载所有的 .class 文件,从而避免出现类加载异常等问题。
因此,在使用 Gradle 和 Spring Boot 开发应用时,需要注意这种编译和打包方式的差异,以避免出现不必要的问题。
gradle 编译jar
要使用 Gradle 编译 jar 文件,你需要在 build.gradle 文件中配置以下内容:
```
plugins {
id 'java'
}
jar {
manifest {
attributes 'Main-Class': 'com.example.Main'
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
```
这个配置使用了 Gradle 自带的 Java 插件,并定义了一个 jar 任务。在 jar 的 manifest 中指定了主类的名称,这个名称需要根据你自己的项目来进行设置。
最后,使用以下命令来执行编译:
```
gradle jar
```
这会在 build/libs 目录下生成一个包含所有依赖的可执行 jar 文件。