2

maven-enforcerプラグインbannedDependenciesルールを使用して、特定のSpringバージョン(3.1.2)を適用したいと思います。

これは、それを実現するためにエンフォーサープラグインを構成する正しい方法ですか?

<configuration>
    <rules>
        <bannedDependencies>
            <searchTransitive>true</searchTransitive>
            <excludes>
                <exclude>org.springframework</exclude>
            </excludes>
            <includes>
                <include>org.springframework:*:3.1.2</include>
            </includes>
        </bannedDependencies>
    </rules>
    <fail>true</fail>
    <failFast>true</failFast>
    <ignoreCache>true</ignoreCache>
</configuration>

上記は機能しているようmvn enforcer:enforceで、コマンドラインでを実行すると、v3.1.0またはorg.springframework:spring-oxmが推移的な依存関係として取り込まれていることが強調されました。

また、 dependencyConvergenceルールを使用したい場合もあるようですが、Mavenによって「競合」として自動的に除外される多くの依存関係エラーが強調表示されます。

これはもう少しコンテキストのあるスニペットです:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>${maven.enforcer.plugin}</version>
            <executions>
                <execution>
                    <id>enforce-versions</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                        <rules>
                            <bannedDependencies>
                                <searchTransitive>true</searchTransitive>
                                <excludes>
                                    <exclude>org.springframework</exclude>
                                    <exclude>org.springframework.security</exclude>
                                    <exclude>org.slf4j</exclude>
                                </excludes>
                                <includes>
                                    <include>org.springframework:*:${spring.version}</include>
                                    <include>org.springframework.security:*:${spring-security.version}</include>
                                    <include>org.slf4j:*:${slf4j.version}</include>
                                </includes>
                            </bannedDependencies>
                            <requireJavaVersion>
                                <version>${enforce.jdk.version}</version>
                            </requireJavaVersion>
                        </rules>
                        <fail>true</fail>
                        <failFast>true</failFast>
                        <ignoreCache>true</ignoreCache>
            </configuration>
        </plugin>
 .....
</plugins>
4

1 に答える 1

4

タグが表記を理解していないため、上記の質問のbannedDependenciesスニペットは機能しません。したがって、ワイルドカードを使用してセクション全体を置き換えて伝達することはできません。<include>groupId:artifactId:version:typeinclude all versions of ALL artifacts in a group

ただし、Mavenの依存関係のバージョン範囲を使用することで、特定の依存関係を強制することができます。

特定のアーティファクトの次のバージョンが与えられた場合(リリースされた順序で):

3.0.0、、、、、3.0.1_ 3.1.0_ 3.2.0.RELEASE_3.3.0

エンフォーサープラグインにすべてを除外するように指示したいとしますが、3.2.0.RELEASEそれを行う唯一の方法は次のとおりです。

exclude versions X where X < DESIRED_VERSION OR X > DESIRED VERSION

上記は事実上次のことを意味します: exclude all versions X where X != DESIRED_VERSION

Mavenの依存関係のバージョン表記では、「バージョンなし」表記は許可されていないため、次のように、より小さい表記とより大きい表記を組み合わせて使用​​する必要があります。

(,3.2.0.RELEASE),(3.2.0.RELEASE,)

つまり: version < '3.2.0.RELEASE' or version > '3.2.0.RELEASE'

最後に、機能するもののスニペットは次のとおりです。

<bannedDependencies>
    <searchTransitive>true</searchTransitive>
    <excludes>
        <exclude>org.springframework:*:(,${spring.version}),(${spring.version},)</exclude>    
    </excludes>
</bannedDependencies>
于 2013-01-15T15:17:48.347 に答える