我读了the docs,没有找到任何关于它的用途的东西。
e5nqia271#
shade:shade Mojo有很好的文档,这里特别是关于createDependencyReducedPom参数,它将创建dependency-reduced-pom.xml文件:maven-shade-plugin/shade-mojo.html#createDependencyReducedPom简而言之,如果您打算使用阴影JAR(而不是普通JAR)作为另一个模块的依赖项,这是非常有用的。该dependency-reduced-pom.xml将不包含阴影JAR中已经存在的JAR,避免无用的重复。
createDependencyReducedPom
dependency-reduced-pom.xml
maven-shade-plugin/shade-mojo.html#createDependencyReducedPom
beq87vna2#
我读了大约一百遍的文档,仍然不能理解这是为了什么,它真正的用例是什么。最后我是这样想的:假设你有一个依赖关系为A、B、C、D、E的项目。在pom.xml中,你可以这样配置shade插件,当它创建uber-jar时(称之为foo.jar),它在阴影jar中包括A,B,C,但出于某种原因,您决定不包括D,即使您的项目依赖于它们-一个恰当的例子是仅在测试时需要的依赖项(例如,具有test的scope并且不包括在阴影jar中的任何依赖性)X1 m4n1x将定义D,这个想法是,如果有人想使用foo.jar,dependency-reduced-pom.xml提供了某种提示,注意foo.jar缺少依赖项D,然后你可能会决定在使用foo.jar的项目中显式地添加D,E。所以dependency-reduced-pom.xml更像missing-dependencies.xml,它列出了shade插件输出的uber-jar中缺少的依赖项。
pom.xml
foo.jar
test
scope
missing-dependencies.xml
eaf3rand3#
简答
dependency-reduced-pom.xml删除了已经在你的shaded jar中的可传递依赖。这可以防止消费者将它们拉入两次。
长答案
有几个原因来遮蔽一个jar。如果你正在生成一个捆绑了所有依赖项的可执行jar,那么你可能会将它上传到一个包存储库,用户手动下载它。在这种情况下,dependency-reduced-pom.xml不会为你做任何事情。另一个原因是因为你正在构建一个库,并且正在使用其他公共库的特定版本。你不想强迫你的用户使用与你相同的版本。通过阴影,你有效地命名了这些依赖项,然后你的用户可以再次包含相同的库,但在不同的版本上。在这种情况下,如果你上传了原始的pom,那么依赖你的库的用户最终会两次拉入所有依赖项。一次是从阴影副本中拉入,一次是从pom中声明的副本中拉入。上传dependency-reduced-pom.xml可以防止这种情况发生,因为阴影依赖项声明被删除了。
zvms9eto4#
dependency-reduced-pom.xml的目的是向您展示您正在准备的工件的最终依赖集是什么。假设工件X依赖于A和B。通过使用maven-shade-plugin嵌入B依赖关系,我们创建了一个仅依赖于A的工件,这就是dependency-reduced-pom.xml将告诉您的内容。(B依赖项不会在该文件中)。这是将安装在Maven存储库中的文件,而不是原始的pom.xml。它将用于计算工件X的依赖集,因此如果任何其他模块依赖于X,则不会依赖于B。
X
A
B
v1uwarro5#
对于任何uber jar生成的dependency-reduced-pom.xml将包含由运行时提供程序提供的依赖项。为了简单地理解在tomcat中运行应用程序时,您可能不需要提供包含Servlet.class依赖项等类的Servlet jar。它将由选定的运行时环境提供。
5条答案
按热度按时间e5nqia271#
shade:shade Mojo有很好的文档,这里特别是关于
createDependencyReducedPom
参数,它将创建dependency-reduced-pom.xml
文件:maven-shade-plugin/shade-mojo.html#createDependencyReducedPom
简而言之,如果您打算使用阴影JAR(而不是普通JAR)作为另一个模块的依赖项,这是非常有用的。该
dependency-reduced-pom.xml
将不包含阴影JAR中已经存在的JAR,避免无用的重复。beq87vna2#
我读了大约一百遍的文档,仍然不能理解这是为了什么,它真正的用例是什么。
最后我是这样想的:假设你有一个依赖关系为A、B、C、D、E的项目。在
pom.xml
中,你可以这样配置shade插件,当它创建uber-jar时(称之为foo.jar
),它在阴影jar中包括A,B,C,但出于某种原因,您决定不包括D,即使您的项目依赖于它们-一个恰当的例子是仅在测试时需要的依赖项(例如,具有test
的scope
并且不包括在阴影jar中的任何依赖性)X1 m4n1x将定义D,这个想法是,如果有人想使用foo.jar
,dependency-reduced-pom.xml
提供了某种提示,注意foo.jar
缺少依赖项D,然后你可能会决定在使用foo.jar
的项目中显式地添加D,E。所以
dependency-reduced-pom.xml
更像missing-dependencies.xml
,它列出了shade插件输出的uber-jar中缺少的依赖项。eaf3rand3#
简答
dependency-reduced-pom.xml删除了已经在你的shaded jar中的可传递依赖。这可以防止消费者将它们拉入两次。
长答案
有几个原因来遮蔽一个jar。
如果你正在生成一个捆绑了所有依赖项的可执行jar,那么你可能会将它上传到一个包存储库,用户手动下载它。在这种情况下,dependency-reduced-pom.xml不会为你做任何事情。
另一个原因是因为你正在构建一个库,并且正在使用其他公共库的特定版本。你不想强迫你的用户使用与你相同的版本。通过阴影,你有效地命名了这些依赖项,然后你的用户可以再次包含相同的库,但在不同的版本上。
在这种情况下,如果你上传了原始的pom,那么依赖你的库的用户最终会两次拉入所有依赖项。一次是从阴影副本中拉入,一次是从pom中声明的副本中拉入。上传dependency-reduced-pom.xml可以防止这种情况发生,因为阴影依赖项声明被删除了。
zvms9eto4#
dependency-reduced-pom.xml
的目的是向您展示您正在准备的工件的最终依赖集是什么。假设工件
X
依赖于A
和B
。通过使用maven-shade-plugin嵌入B
依赖关系,我们创建了一个仅依赖于A
的工件,这就是dependency-reduced-pom.xml
将告诉您的内容。(B
依赖项不会在该文件中)。这是将安装在Maven存储库中的文件,而不是原始的pom.xml
。它将用于计算工件X
的依赖集,因此如果任何其他模块依赖于X
,则不会依赖于B
。v1uwarro5#
对于任何uber jar生成的
dependency-reduced-pom.xml
将包含由运行时提供程序提供的依赖项。为了简单地理解在tomcat中运行应用程序时,您可能不需要提供包含Servlet.class依赖项等类的Servlet jar。它将由选定的运行时环境提供。