Maven Shade插件-排除某些类别的地雷被重新定位过程修改
我正在使用Maven Shade插件重新定位Apache的一些类。 我面临的问题是,我将此字符串作为我的类的一部分:Maven Shade插件-排除某些类别的地雷被重新定位过程修改,maven,maven-plugin,maven-shade-plugin,Maven,Maven Plugin,Maven Shade Plugin,我正在使用Maven Shade插件重新定位Apache的一些类。 我面临的问题是,我将此字符串作为我的类的一部分: private static final String ORG_APACHE_HTTP_HTTP_REQUEST = "org.apache.http.HttpRequest" 但是Maven Shade插件将其更改为 private static final String ORG_APACHE_HTTP_HTTP_REQUEST = "com.company.dependen
private static final String ORG_APACHE_HTTP_HTTP_REQUEST = "org.apache.http.HttpRequest"
但是Maven Shade插件将其更改为
private static final String ORG_APACHE_HTTP_HTTP_REQUEST = "com.company.dependencies.org.apache.http.HttpRequest"
有没有办法让我的类不被maven shade插件修改
当前配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<relocations>
<relocation>
<pattern>org.apache</pattern> <shadedPattern>com.company.org.apache</shadedPattern>
<excludes><exclude>com.company.ClassToBeExcluded</exclude>
</excludes>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
包裹
阴凉处
假的
org.apache.com.company.org.apache
com.company.classtobe除外
这有两个方面:
- 您有一个类:com.company.ClassToBeExcluded
- 此类包含一个具有以下值的字符串:“org.apache.http.HttpRequest”
org.apache.http.HttpRequest
的重新定位设置为禁止操作,如下所示:
<relocation>
<pattern>org.apache.http.HttpRequest</pattern>
<shadedPattern>org.apache.http.HttpRequest</shadedPattern>
</relocation>
…但只要您告诉shade不要重新定位org.apache.http.HttpRequest
,那么该类中的org\u apache\u http\u http\u请求将不会更新
注意:org
是一个非常流行的域名,因此您可能已经在重新定位它了,如果是这样,那么只需确保您在org.apache.http.HttpRequest
上面定义了org
的无操作重新定位
我通过创建一个类来验证这一点:com.foo.TheClass
包含私有静态最终字符串ORG\u APACHE\u HTTP\u HTTP\u请求=“org.apache.http.HttpRequest”
。然后,我针对包含该类的模块运行shade插件,该类被重新定位,并且更新了ORG\u APACHE\u HTTP\u HTTP\u请求。然后,我添加了以下内容:
<relocation>
<pattern>org.apache.http.HttpRequest</pattern>
<shadedPattern>org.apache.http.HttpRequest</shadedPattern>
</relocation>
org.apache.http.HttpRequest
org.apache.http.HttpRequest
…并运行shade插件,该类被重新定位,但未更新ORG\u APACHE\u HTTP\u HTTP\u请求。我还删除了对com.foo.TheClass
的重新定位,并重新运行了shade插件,该类没有重新定位,ORG\u APACHE\u HTTP\u HTTP\u请求
也没有更新
这是使用shade插件的v3.0.0进行验证的
注意:这有点笨拙,因为您可能希望重新定位类,但(可以理解)不希望更新内部类属性。如果这是您的问题,那么您可能希望对此问题进行投票。如果我理解正确,它会将类更改为其原始名称。问题是我不想让它改变课堂内容。我遗漏了什么吗?抱歉,我误解了。我现在用相关的解决方案更新了我的回答问题。
<relocation>
<pattern>org.apache.http.HttpRequest</pattern>
<shadedPattern>org.apache.http.HttpRequest</shadedPattern>
</relocation>