我正在使用 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
通过 这个 答案是可行的,但我怎样才能用排除项来填充我的依赖项,而不是硬编码?
这个 includes
和 excludes
Maven JAR Plugin的参数可用于 档案,不在 依赖性.
Selenium通常被用作测试依赖。Selenium是否被声明为Maven依赖项?如果它只用于测试,我希望它有以下功能 <scope>test</scope>
. 在这种情况下,它不会最终出现在JAR清单中。
如果你不使用Selenium作为测试依赖,但又不想让它最终出现在清单中,你可以考虑添加 <scope>provided</scope>
. Provided dependencies也不会出现在JAR清单中。这也意味着在运行时,一旦你调用Selenium API,它可能会崩溃......