作成と共有依存関係を分離しながら、カスタムSpringライブラリをインポートします

Robbo_UK:

イムは、内部チーム全体で共有する春のライブラリプロジェクトを作成するために探して。

非常に基本的な概念レベルでは、ライブラリは、キューにメッセージイベントを送信しますし、私の計画は、いくつかの春ブーツMicroservices全体でチーム内でこれを標準化することで、メッセージを同じように送ります。

図書館プロジェクトでの私のポンポンは、次のようになります

<artifactId>my-library</artifactId>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

etc...

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.16.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.2.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.6</version>
    </dependency>

ルックスはこれを好きなことを私は図書館プロジェクトでサービスを持っています

public class EventService {

  Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

  public void sendAuditEvent(AuditMessage auditMessage){

    Set<ConstraintViolation<AuditMessage>> violations = validator.validate(auditMessage);

    if(!isEmpty(violations)){
      log.error("Unable to send audit message");
      violations.stream().forEach( v-> log.error(v.getMessage()));
    }
    log.info("Found {} violations", violations.size());
    // etc blah blah
    return;
  }
}

私は別のプロジェクトにライブラリをインポートするとき、私の考えは、私がのEventServiceをAutowireことができるということです。ポンポンでそれを追加することで、その後、@ComponentScan({"my.library.package.eventlibrary.service"})

どのように私は春バージョンのロックを防ぐのですか?ライブラリは、スプリングを使用している場合は2.1.5.RELEASE、今日とライブラリが、私は潜在的にMavenの紛争で終わるません異なるバージョンを使用して輸入することをプロジェクト?

また、輸入ライブラリは休止APIの下位バージョンを使用して、ライブラリが持っているプロジェクトを言うことができます6.0.16.Finalどのように私は新しいものを使用してからプロジェクトを妨げるライブラリクラスパスに1を発見しましたか?

さらに私の質問を明確にするためには、私はそれを使用するプロジェクトのライブラリに依存関係を分離できる方法があります。

Cepr0:

あなたはあなたのライブラリーがそれを使用するプロジェクトにもたらすことができるすべての推移的依存関係を除外しようとすることができます。

これを行うには、交換する必要がありますspring-boot-starter-parentspring-boot-dependenciesしてdependencyManagementのセクションと使用providedして仕事にすべての依存ライブラリのニーズに合わせて範囲およびその正確ライブラリで動作しますプロジェクトで使用されます。

たとえば、あなたのライブラリーののpom.xmlは、次のようになりますことができます。

<!-- ... -->
    <groupId>com.example</groupId>
    <artifactId>library</artifactId>
    <version>0.1.0</version>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <spring-boot.version>2.1.5.RELEASE</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
<!-- ... -->

そして、あなたは別のプロジェクトで、あなたのライブラリーを使用することができます、例えばその使用古い春ブーツ:

<!-- ... -->
    <groupId>com.example</groupId>
    <artifactId>old-project</artifactId>
    <version>0.13.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.19.RELEASE</version>
        <relativePath/>
    </parent>
<!-- ... -->
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>library</artifactId>
            <version>0.1.0</version>
        </dependency>

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

したがって、このプロジェクトが使用されますhibernate-validator:5.3.6.Finalそのからspring-boot-starter-web

重要な注意 - あなたのライブラリーのコードは、春ブーツのこのバージョンの「互換性」でなければなりません。言い換えれば、あなたが関心のある春ブーツの異なるバージョンを使用して、ライブラリをテストする必要があります。

私を参照してください。プロジェクトを例として。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=179903&siteId=1