Java 着色jar中的Maven依赖排除

Java 着色jar中的Maven依赖排除,java,maven,dependencies,dependency-exclusion,Java,Maven,Dependencies,Dependency Exclusion,因此,我有一个多模块项目,我为它创建了一个着色jar,以添加到非maven项目中,并支持其他maven项目。我们有一些自己的库作为依赖项。但是,将它们捆绑在着色jar中会在已经具有这些依赖项的非maven应用程序中造成问题(并且不能仅仅为了依赖着色版本而删除这些依赖项)。我一直试图在我的项目的pom中创建一个概要文件,以从着色jar中排除这些依赖项,但maven似乎并不在意 我不能发布整个pom,但本质上,每个模块都依赖于其他模块,最后我们有一个最终模块,它将所有内容捆绑在一起,这就是我的配置文

因此,我有一个多模块项目,我为它创建了一个着色jar,以添加到非maven项目中,并支持其他maven项目。我们有一些自己的库作为依赖项。但是,将它们捆绑在着色jar中会在已经具有这些依赖项的非maven应用程序中造成问题(并且不能仅仅为了依赖着色版本而删除这些依赖项)。我一直试图在我的项目的pom中创建一个概要文件,以从着色jar中排除这些依赖项,但maven似乎并不在意

我不能发布整个pom,但本质上,每个模块都依赖于其他模块,最后我们有一个最终模块,它将所有内容捆绑在一起,这就是我的配置文件所在的位置。我添加了一个依赖项列表,所有依赖项都有我不想添加到着色jar中的工件的排除项,我使用dependency:tree将具有可传递依赖项的每个模块添加到排除项,并为其添加了一个依赖项以及它自己的排除项,我在shade插件配置中添加了一个artifactSet以排除这些工件,并且添加了强制插件以在该工件存在时使构建失败

我不想添加的工件仍在添加到着色罐子中

<dependencies>
    <dependency>
        <groupId>my.group</groupId>
        <artifactId>my-module</artifactId>
        <version>1.2.3</version>
        <exclusions>
            <exclusion>
                <groupId>some.dependency</groupId>
                <artifactId>i-dont-want</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

我的团队
我的模块
1.2.3
有些依赖
我不想要
这是可行的,但问题是,我还需要对依赖关系树下的某个模块有一个依赖关系,该依赖关系依赖于上面的模块

因此,当我执行以下操作时,我试图排除的依赖项最终会出现在着色的jar中

<dependencies>
    <dependency>
        <groupId>my.group</groupId>
        <artifactId>my-module</artifactId>
        <version>1.2.3</version>
        <exclusions>
            <exclusion>
                <groupId>some.dependency</groupId>
                <artifactId>i-dont-want</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>my.group</groupId>
        <artifactId>dependes-on-my-module</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

我的团队
我的模块
1.2.3
有些依赖
我不想要
我的团队
取决于我的模块
1.2.3
如果我尝试在我的阴影配置中添加排除项,如下所示,它似乎也不在乎

<configuration>
    <artifactSet>
        <excludes>
            <exclude>some.dependency:i-dont-want</exclude>
        </excludes>
    </artifactSet>
    ...
</configuration>

依赖:我不想要
...
我尝试过在线搜索,可能在堆栈溢出上尝试过很多似乎没有帮助的东西(甚至按照我的配置文件中提供的标记东西,或者将所有具有可传递依赖项的依赖项添加到我试图删除的工件中,但没有运气)


有什么办法可以强制这些可传递的依赖项不添加到我的着色jar中吗?我只是不想让他们加入;在这一点上,我会尝试一切。。。提前感谢您的帮助。

最终成为一名开发人员,在另一个模块中添加了一个shade插件,该插件最终将可传递的依赖项包含在其自身中并传递出去。除了maven似乎没有办法直接从轨道上核武器外,它现在似乎正在工作。

最终成为一名开发人员,在另一个模块中添加了一个阴影插件,该插件最终将可传递的依赖项包含在自身中并传递出去。除了maven似乎没有办法从轨道上用核武器炸东西外,它现在似乎正在工作。

IMHO,使用uber或胖罐子作为另一个项目的依赖项几乎总是一个坏主意。您遇到了您描述的问题:fat jar中的依赖关系也在不同的位置出现,并且您在项目中得到了奇怪的效果,通常是在运行时。另一方面,拥有一个胖罐子库有什么好处?Maven自动解析可传递依赖项(因此不需要胖jar),对于遗留ant项目,您只需复制可传递依赖项的文件夹,而不是一个胖jar。那么你为什么想要一个胖罐子呢?因为netbeans平台不是maven,大量的可传递依赖项比仅仅使用胖罐子更痛苦。“netbeans平台不是maven”:这是什么意思?您是否为Netbeans创建插件/扩展?至少在任何Maven上下文中,我都会避免胖jar。如果仍在添加工件,则意味着它来自另一个依赖项,通常是可传递依赖项。我们的netbeans应用程序使用ant而不是Maven。还有很多其他用户不想使用maven;不幸的是,使用非着色jar不是一个选项。然而,我发现另一个开发人员在另一个模块中添加了一个shade插件部分;我的个人资料没问题,只是一个开发人员在他们不应该有的地方添加了一些东西,让每个人都感到困惑。但是,使用uber或fat jar作为另一个项目的依赖项几乎总是一个坏主意。您遇到了您描述的问题:fat jar中的依赖关系也在不同的位置出现,并且您在项目中得到了奇怪的效果,通常是在运行时。另一方面,拥有一个胖罐子库有什么好处?Maven自动解析可传递依赖项(因此不需要胖jar),对于遗留ant项目,您只需复制可传递依赖项的文件夹,而不是一个胖jar。那么你为什么想要一个胖罐子呢?因为netbeans平台不是maven,大量的可传递依赖项比仅仅使用胖罐子更痛苦。“netbeans平台不是maven”:这是什么意思?您是否为Netbeans创建插件/扩展?至少在任何Maven上下文中,我都会避免胖jar。如果仍在添加工件,则意味着它来自另一个依赖项,通常是可传递依赖项。我们的netbeans应用程序使用ant而不是Maven。还有很多其他用户不想使用maven;不幸的是,使用非着色jar不是一个选项。然而,我发现另一个开发人员在另一个模块中添加了一个shade插件部分;我的个人资料没有问题,只是一个开发人员添加了一些他们不应该有的东西,让每个人都感到困惑