在没有源代码更改的情况下,我可以不使用 运行 shade 插件吗?
Can I not run shade plugin when there are no source changes?
我能否以这样一种方式配置 maven 阴影插件,即当没有源更改时它不会再次创建阴影插件(并保留旧插件)- 在我不使用的情况下 "clean".
据我所知,答案是否定的(然而,我再次忽略了插件文档)。由于编译器识别 .java 文件上的更改并在没有任何更改的情况下跳过编译我的第一个猜测是将插件绑定到默认生命周期的 process-classes
阶段,这显然会引发错误(代表我自己在我真正考虑它之前,我只是尝试了这些事情......从逻辑上讲,插件打包 "uberJar" 还为时过早)。
但是,如果您能够以任何方式(我不知道如何)跳过默认生命周期的 package
阶段,如果没有任何更改(包括资源),插件也不会 运行 .
另请注意,只要您不进入默认生命周期的 package
阶段(例如 mvn prepare-package
,这在我的任何用例中都没有多大意义,插件就不会被触发所以我只会 运行 mvn test
除非我真的需要安装一些打包的东西 and/or。
我还必须承认,我只将插件用于 "reverse engineering" 某些项目设置,其中 "i just want everything from that project in my /target folder" :)
也遇到了这个问题。
按照此处的建议实施我自己的着色器怎么样:
https://maven.apache.org/plugins/maven-shade-plugin/examples/use-shader-other-impl.html
不知道有没有更直接的方法。
@Component( role = Shader.class, hint = "mock" )
public class MockShader extends DefaultShader
{
public void shade( Set<File> jars,
File uberJar,
List<Filter> filters,
List<Relocator> relocators,
List<ResourceTransformer> resourceTransformers )
throws IOException, MojoExecutionException
{
//pseudo code
if source code changes
call super.shade(.......)
else
do nothing
}
}
我能否以这样一种方式配置 maven 阴影插件,即当没有源更改时它不会再次创建阴影插件(并保留旧插件)- 在我不使用的情况下 "clean".
据我所知,答案是否定的(然而,我再次忽略了插件文档)。由于编译器识别 .java 文件上的更改并在没有任何更改的情况下跳过编译我的第一个猜测是将插件绑定到默认生命周期的 process-classes
阶段,这显然会引发错误(代表我自己在我真正考虑它之前,我只是尝试了这些事情......从逻辑上讲,插件打包 "uberJar" 还为时过早)。
但是,如果您能够以任何方式(我不知道如何)跳过默认生命周期的 package
阶段,如果没有任何更改(包括资源),插件也不会 运行 .
另请注意,只要您不进入默认生命周期的 package
阶段(例如 mvn prepare-package
,这在我的任何用例中都没有多大意义,插件就不会被触发所以我只会 运行 mvn test
除非我真的需要安装一些打包的东西 and/or。
我还必须承认,我只将插件用于 "reverse engineering" 某些项目设置,其中 "i just want everything from that project in my /target folder" :)
也遇到了这个问题。
按照此处的建议实施我自己的着色器怎么样:
https://maven.apache.org/plugins/maven-shade-plugin/examples/use-shader-other-impl.html
不知道有没有更直接的方法。
@Component( role = Shader.class, hint = "mock" )
public class MockShader extends DefaultShader
{
public void shade( Set<File> jars,
File uberJar,
List<Filter> filters,
List<Relocator> relocators,
List<ResourceTransformer> resourceTransformers )
throws IOException, MojoExecutionException
{
//pseudo code
if source code changes
call super.shade(.......)
else
do nothing
}
}