Maven 在预先存在的uber jar上运行mvn shade

Maven 在预先存在的uber jar上运行mvn shade,maven,jar,maven-shade-plugin,uberjar,Maven,Jar,Maven Shade Plugin,Uberjar,我有一个已经生成的uber jar(不是通过Maven;我只有这个jar)。我需要将它与另一个jar一起使用,它有依赖冲突。我想在第一个uber jar中隐藏所有lib,除了一些需要公开的类 采用现有jar并使用Maven shade plugin重命名其大多数类(白名单除外),生成新的uber jar的设置是什么?您可以使用Maven shade plugin执行“重命名所有”类型的活动。例如: <relocations> <relocation> <

我有一个已经生成的uber jar(不是通过Maven;我只有这个jar)。我需要将它与另一个jar一起使用,它有依赖冲突。我想在第一个uber jar中隐藏所有lib,除了一些需要公开的类

采用现有jar并使用Maven shade plugin重命名其大多数类(白名单除外),生成新的uber jar的设置是什么?

您可以使用
Maven shade plugin
执行“重命名所有”类型的活动。例如:

<relocations>
  <relocation>
    <pattern></pattern>
    <shadedPattern>relocated.</shadedPattern>
    <excludes>
      <exclude>com.myfirm.level1.level2.*</exclude>                   
    </excludes>
  </relocation>
</relocations>

为什么这个不能用?只要该类未在Jar外部访问,就不会修改字节码以使用
重新定位的.a.b.c
?如果查看堆栈跟踪,就会发现重新定位“编辑”引用的类型未在Jar中定义。因此,对
java.lang.Object
的引用被更改为
relocated.java.lang.Object
,该类路径上不存在。我将对这个答案进行编辑,使其更加清晰。
java.lang.NoClassDefFoundError: relocated/java/lang/Object
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Caused by: java.lang.ClassNotFoundException: relocated.java.lang.Object
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 13 more
Exception in thread "main"