如何在maven中排除某些依赖关系被添加到Class-Path中?

问题描述 投票:0回答:1

我正在使用 maven 建立一个可执行的 JAR 而我想把所有的依赖关系,除了少数几个,添加到 Class-Path 我的 MANIFEST.MF. 到目前为止,我使用的是 maven-jar-plugin 为此。

<!-- Add dependent JARs to the classpath -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>libraries</classpathPrefix>
                <mainClass>MyMainClass</mainClass>
            </manifest>
            <manifestEntries>
                <Built-By>Me</Built-By>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

这对添加所有的依赖关系是有效的。然而,我还想排除某些依赖关系被添加到 Class-Path. 根据 文件 您可以使用 exclude 标签如下。

<configuration>
    <!-- ... -->
    <excludes>
        <exclude>**selenium*</exclude>
    </excludes>
    <!-- ... -->
</configuration>

我希望这能排除任何具有以下特征的依赖关系 selenium 的名称中,但它不工作。例如,我想排除 libraries/selenium-json-4.0.0-alpha-6.jar 来自 Class-Path. 即使我指定了确切的名称,它也不排除任何东西。我还想提供 groupId 类似于《刑法》中的 "排除法"。maven-dependency-plugin's excludeGroupIds 标签的作用。

如何才能获得所需的 Class-Path 管理采用 maven?

我也在用 maven-shade-plugin 用于构建可执行 JAR 但其显现的操纵设施似乎不太了解记载。设置 Class-Path 使用 maven-shade-plugin 通过 这个 答案是可行的,但我怎样才能用排除项来填充我的依赖项,而不是硬编码?

java maven jar executable-jar
1个回答
1
投票

TL;DR

这个 includesexcludes Maven JAR Plugin的参数可用于 档案,不在 依赖性.

较长版本

Selenium通常被用作测试依赖。Selenium是否被声明为Maven依赖项?如果它只用于测试,我希望它有以下功能 <scope>test</scope>. 在这种情况下,它不会最终出现在JAR清单中。

如果你不使用Selenium作为测试依赖,但又不想让它最终出现在清单中,你可以考虑添加 <scope>provided</scope>. Provided dependencies也不会出现在JAR清单中。这也意味着在运行时,一旦你调用Selenium API,它可能会崩溃......

© www.soinside.com 2019 - 2024. All rights reserved.