必选项
- 建议使用maven而不是gradle编写自定义starter
- 引入spring-boot-starter-parent作为父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
- 依赖中需要包含spring-boot-autoconfigure
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
- 创建spring.factories文件
springboot会读取该文件中配置的Configuration类自动装配bean,文件路径必须位于classpath:/META-INF/
,例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.FooAutoConfiguration,\
com.example.BarAutoConfiguration
可选项(使用kotlin)
- 从archetype创建项目
在idea中new project/module时,选择左侧Maven选项卡,并勾选右侧面板上部的Create from archetype
,然后找到列表中的org.jetbrains.kotlin:kotlin-archetype-jvm
,以此作为项目初始化模板 - 配置kotlin maven插件
以下完整的配置包含
- 使用kapt来处理注解
不引入kapt则kotlin文件中的注解不会生成对应的spring-configuration-metadata.json属性。因为我们建立的是spring starter项目,故kapt插件中指定的注解处理器为org.springframework.boot:spring-boot-configuration-processor
- 设置jsr305编译选项
开启此选项可使kotlin编译器识别到java代码中注解的@Nullable @NotNull等注解以判断变量和api的可空性 - kotlin spring插件
这是对kotlin all open插件的一个封装,使具备spring特定注解的类自动转换为open class,以便实现基于aop的功能
注意1:如果前一步使用了kotlin archetype创建项目,则此处idea会自动生成kotlin plugin配置,需要覆盖已存在的plugin节点以避免重复
注意2:引用starter的springboot项目也需要同样的plugin配置,虽然plugin配置中已经指定了spring-boot-configuration-processor,但项目本身的dependencies中的spring-boot-configuration-processor也不可省略,否则虽然maven在compile后会生成spring-configuration-metadata.json,但ide不会自动识别它来指导application*.yml的自动补全
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
</configuration>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
<sourceDir>src/main/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<!-- 在此处指定你的注解处理器。 -->
<annotationProcessorPath>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring.boot.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
- 使用dokka来处理javadoc
不引入dokka则kotlin代码中的注释不会生成到javadoc文件中
注意:一般情况下dokka的版本使用${kotlin.version}
与kotlin保持一致即可,但有时候dokka的版本号有可能滞后(官方发布进度落后于kotlin),这时候需要手动指定可用的版本号
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>javadocJar</goal>
</goals>
</execution>
</executions>
<configuration>
<dokkaPlugins>
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>kotlin-as-java-plugin</artifactId>
</plugin>
</dokkaPlugins>
</configuration>
</plugin>
- 配置源码打包发布
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
网友评论