Maven 从依赖项jar中排除Java包

Maven 从依赖项jar中排除Java包,maven,jar,dependencies,maven-3,Maven,Jar,Dependencies,Maven 3,我想使用来自第三方供应商的jar。但是在这个jar中,我有旧版本的Java包org.osgi.framework,我需要找到一些方法将包从主项目中排除。大概是这样的: <dependency> <groupId>com.ibm</groupId> <artifactId>com.ibm.ws.admin.client</artifactId> <version>8.5.0&

我想使用来自第三方供应商的jar。但是在这个jar中,我有旧版本的Java包
org.osgi.framework
,我需要找到一些方法将包从主项目中排除。大概是这样的:

<dependency>
      <groupId>com.ibm</groupId>
          <artifactId>com.ibm.ws.admin.client</artifactId>
          <version>8.5.0</version>
          <exclusions>
             <exclusion>org.osgi.framework</exclusion>
          </exclusions>
          <type>jar</type>
</dependency>

com.ibm
com.ibm.ws.admin.client
8.5.0
org.osgi.framework
罐子

您能推荐一些解决方案吗?

尽管更好的解决方案是使用分类器(如中所述)重新打包依赖项(没有不需要的包),并将其发布到您的企业Maven存储库中(如果是个人项目,则发布到您的本地Maven缓存中),下面是一个不同的解决方案,也应该适合您的需要

您可以有一个Maven项目,有一个只具有此依赖项的模块,在其中您可以使用及其
过滤器
属性,如its中所述

根据,
过滤器
元素:

要使用的存档筛选器。允许您以复合标识符的形式指定一个工件,该标识符由artifactSet使用,并指定一组include/exclude文件模式,用于过滤将哪些归档内容添加到着色jar中

在您的情况下,以下配置应应用过滤器:

更新
进一步注意:在应用过滤器的模块中,您应该将依赖项声明为,以便使用者模块不会再次以传递方式将其引入。


com.ibm
com.ibm.ws.admin.client
8.5.0
真的

可选不影响模块本身,仅影响用户模块。Shade插件将继续工作(为了以防万一,我重新测试了它)。

@PeterPenzov您尝试过上述方法吗?它成功了吗?不,即使是建议的解决方案,我仍然有同样的问题。因此,您配置了一个多模块maven项目,其中一个模块仅用于此依赖项创建过滤的ibm库,然后您的模块依赖于此模块(因此不再依赖ibm),并且您仍然获得了该包?不,这次我得到了警告。看起来必须将Netbeans配置为不在JVM类路径中使用包
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <filters>
                            <filter>
                                <artifact>com.ibm:com.ibm.ws.admin.client</artifact>
                                <excludes>
                                    <exclude>org/osgi/framework/**</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
+ aggregator/parent project
    - filtered-dependency-module (applying the shade filter)
    - consumer-module (having dependency on the filtered module)
<dependencies>
    <dependency>
        <groupId>com.ibm</groupId>
        <artifactId>com.ibm.ws.admin.client</artifactId>
        <version>8.5.0</version>
        <optional>true</optional>
    </dependency>
</dependencies>