美文网首页
自定义spring boot starter要点

自定义spring boot starter要点

作者: rainmanhhh | 来源:发表于2021-05-09 12:02 被阅读0次

必选项

  1. 建议使用maven而不是gradle编写自定义starter
  2. 引入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>
  1. 依赖中需要包含spring-boot-autoconfigure
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
  </dependency>
  1. 创建spring.factories文件
    springboot会读取该文件中配置的Configuration类自动装配bean,文件路径必须位于classpath:/META-INF/,例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.FooAutoConfiguration,\
  com.example.BarAutoConfiguration

可选项(使用kotlin)

  1. 从archetype创建项目
    在idea中new project/module时,选择左侧Maven选项卡,并勾选右侧面板上部的Create from archetype,然后找到列表中的org.jetbrains.kotlin:kotlin-archetype-jvm,以此作为项目初始化模板
  2. 配置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>
  1. 使用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>
  1. 配置源码打包发布
    <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>

相关文章

网友评论

      本文标题:自定义spring boot starter要点

      本文链接:https://www.haomeiwen.com/subject/gwpmdltx.html