Пользовательский стартер вступает в силу в 1.5.20, но не работает после 2.0 и возникает ошибка - PullRequest
0 голосов
/ 01 мая 2019

Я настраиваю стартер Springboot, код вступает в силу в версии 1.5.20, но не работает после 2.0 (я тестировал на версии 2.0.9 、 2.1.1 и 2.1.4).

В чем разница между v1.xx и v2.xx стартера?

Что нужно сделать, чтобы исправить это в версии 2.xx?

Iсоздал два проекта Maven и проект Spring Starter. Проекты выглядят следующим образом:

первый проект с именем «share», он выступает в качестве стороннего банка.

второй проект под названием «share-spring-boot-starter», это зависит от jar «share».

третий проект с именем «springboot-demo», он действует как веб-проект, зависит от jar "share-spring-boot-starter".

ПРИМЕЧАНИЕ. Jar первого проекта и второго проекта строится командой mvn clean install, и установите jar в локальный репозиторий maven с помощью mvn install:install-file -Dfile=xxx ....

Код о проекте "share":

ShareDemo.java

package com.example;

import com.alibaba.fastjson.JSONObject;

public class ShareDemo {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String doSomeThing() {
        return this.toString();
    }

    @Override
    public String toString() {
        return JSONObject.toJSONString(this);
    }

}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>share</artifactId>
  <version>1.2.1</version>
  <packaging>jar</packaging>

  <name>share</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.57</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Код о "share-spring-boot-starter "project:

ShareAutoConfiguration.java

package com.example.springboot.autoconfiguration;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.example.ShareDemo;

@Configuration
@EnableConfigurationProperties(ShareProperties.class)
public class ShareAutoConfiguration {

    @Bean
    public ShareDemo getShare(ShareProperties properties) {
        ShareDemo shareDemo = new ShareDemo();
        shareDemo.setName(properties.getName());
        shareDemo.setAge(properties.getAge());
        return shareDemo;
    }

}

ShareProperties.java

package com.example.springboot.autoconfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "com.study")
public class ShareProperties {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String doSomeThing() {
        return this.toString();
    }

    @Override
    public String toString() {
        return "从配置中读取到结果:【name=" + name + ",age=" + age + "】";
    }

}

spring.factories

#Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.springboot.autoconfiguration.ShareAutoConfiguration

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>share-spring-boot-starter</artifactId>
  <version>1.1.0</version>
  <packaging>jar</packaging>

  <name>share-spring-boot-starter</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <springboot.version>1.5.20.RELEASE</springboot.version>
  </properties>

  <dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>share</artifactId>
        <version>1.2.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${springboot.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>${springboot.version}</version>
    </dependency>

    <!-- 生成配置元数据 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <version>${springboot.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.57</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

Код о проекте "springboot-demo":

UserController.java

package com.example.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.ShareDemo;

/**
 * @author zero
 *
 */
@RestController
public class UserController {

  @Autowired
  ShareDemo shareDemo;

  @RequestMapping("/share")
  public String doSomeThing() {
    return shareDemo.doSomeThing();
  }

}

application.properties

com.study.name=kitty
com.study.age=26

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.20.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <name>springboot-demo</name>
    <description>Springboot Project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>share-spring-boot-starter</artifactId>
            <version>1.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Весь код этих проектов можно найти здесь: https://github.com/biaotang/custom-spring-boot-starter

Я хочу запустить этот код в версии 2.xx ,, ноэто не работает и опроисходит ошибка компиляции в проекте «springboot-demo»

  @Autowired
  ShareDemo shareDemo;  // can't be resovle the type

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...