Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven Shade插件-排除某些类别的地雷被重新定位过程修改_Maven_Maven Plugin_Maven Shade Plugin - Fatal编程技术网

Maven Shade插件-排除某些类别的地雷被重新定位过程修改

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

我正在使用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.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”
shade插件将尝试通过(a)重新定位类和(b)更新它假定的类引用(尽管嵌入到字符串中)对这两个类进行操作

要防止shade插件更新字符串,必须将
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>