Java 在Maven中使用阴影重定位重构导入语句

Java 在Maven中使用阴影重定位重构导入语句,java,maven,intellij-idea,maven-shade-plugin,Java,Maven,Intellij Idea,Maven Shade Plugin,我一直在使用Shade将依赖项从com.package.x重新定位到com.package.y;当我使用Maven构建时,它会抱怨不兼容的类型-因此我必须更改代码中的导入语句以匹配com.package.y 这真的是唯一的办法吗?更改导入使IntelliJ抱怨,并基本上破坏了IDE集成。Shade无法修改导入吗?Shade插件的主要用途是生成一个uber jar,同时重新定位其中的一些包以防止冲突。一般来说,您不希望针对uberjar进行开发 如果你真的想根据你的着色jar进行开发(或者你只是用

我一直在使用Shade将依赖项从
com.package.x
重新定位到
com.package.y
;当我使用Maven构建时,它会抱怨不兼容的类型-因此我必须更改代码中的导入语句以匹配
com.package.y


这真的是唯一的办法吗?更改导入使IntelliJ抱怨,并基本上破坏了IDE集成。Shade无法修改导入吗?

Shade插件的主要用途是生成一个uber jar,同时重新定位其中的一些包以防止冲突。一般来说,您不希望针对uberjar进行开发


如果你真的想根据你的着色jar进行开发(或者你只是用着色来重新定位一个现有的jar),那么你需要将你的着色jar列为一个替代原来的jar,我想这可能需要您清理循环依赖项。

可以通过在配置标记中将shadedArtifactAttached设置为true来解决此问题

<shadedArtifactAttached>true</shadedArtifactAttached>
true
完整的示例和参考:

我有同样的问题,我通过添加上面的属性来修复它。我正在共享着色模块的pom.xml,以防您想看到任何其他标记值

pom.xml


4.0.0
org.bitguiders.account.management
帐户管理
1.0.24-快照
帐户管理度量库
帐户管理度量库
捆绑客户端库
org.cas.osd.platform.ciam.shade
org.cas.osd.platform.ciam.account.management
客户管理指标
${project.parent.version}
编译
org.apache.maven.plugins
maven阴影插件
3.2.1
包裹
阴凉处
真的
真的
真的
真的
组织。
${shade.package}.org。
org.slf4j**
org.xml**
org.w3c**
org.bitguiders.usagemetrics**
org.bitguiders**
org.bitguiders**
org.apache.flume**
org.apache.http**
通用域名格式。
${shade.package}.com。
com.google.common**
com.sun.xml.bind.xml声明
javassist
${shade.package}.javassist
javax.ws.rs
${shade.package}.javax.ws.rs
泽西岛。重新包装
${shade.package}.jersey.repacked
净。
${shade.package}.net。
org.slf4j:slf4j api
org.bitguiders.cpp:cpp产品使用摄取网关客户端

是的,我正在尝试将jackson与我的jar捆绑在一起(说来话长)。你的项目应该在com.fasterxml.jackson上正常使用jackson(或者现在是什么时候),shade插件会负责将你的shade uberjar中的所有代码指向重新定位的包。那么你是说shade应该自动更新导入?每当我在这样做之后运行测试时,它都会抱怨我的包vs.com.fasterxml的类型错误可能是由于模块之间的相互依赖性造成的?听起来好像你的着色jar显示在测试的类路径上。一般来说,我不希望导出的着色jar与包含tests/etc/etc的jar相同,因为它提供了一点抽象,以防我更改内部包结构。这确实是最好的选择,但我很感激你可能不在这一点上;您是否尝试过玩shadedArtifactAttached属性;设置为真?
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.bitguiders.account.management</groupId>
      <artifactId>account-management</artifactId>
      <version>1.0.24-SNAPSHOT</version>
   </parent>
   <artifactId>account-management-metrics-lib</artifactId>
   <name>account-management-metrics-lib</name>
   <description>Bundled client library</description>
   <properties>
      <shaded.package>org.cas.osd.platform.ciam.shaded</shaded.package>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.cas.osd.platform.ciam.account.management</groupId>
         <artifactId>account-management-metrics</artifactId>
         <version>${project.parent.version}</version>
         <scope>compile</scope>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals>
                     <goal>shade</goal>
                  </goals>
                  <configuration>
                     <shadedArtifactAttached>true</shadedArtifactAttached>
                     <createDependencyReducedPom>true</createDependencyReducedPom>
                     <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
                     <createSourcesJar>true</createSourcesJar>
                     <relocations>
                        <!-- manually hide individual dependencies that a client might conflict with -->
                        <relocation>
                           <pattern>org.</pattern>
                           <shadedPattern>${shaded.package}.org.</shadedPattern>
                           <excludes>
                              <exclude>org.slf4j.**</exclude>
                              <exclude>org.xml.**</exclude>
                              <exclude>org.w3c.**</exclude>
                              <exclude>org.bitguiders.usagemetrics.**</exclude>
                              <exclude>org.bitguiders.**</exclude>
                              <exclude>org.bitguiders.**</exclude>
                              <exclude>org.apache.flume.**</exclude>
                              <exclude>org.apache.http.**</exclude>
                           </excludes>
                        </relocation>
                        <relocation>
                           <pattern>com.</pattern>
                           <shadedPattern>${shaded.package}.com.</shadedPattern>
                           <excludes>
                              <exclude>com.google.common.**</exclude>
                              <exclude>com.sun.xml.bind.xmlDeclaration</exclude>
                           </excludes>
                        </relocation>
                        <relocation>
                           <pattern>javassist</pattern>
                           <shadedPattern>${shaded.package}.javassist</shadedPattern>
                        </relocation>
                        <relocation>
                           <pattern>javax.ws.rs</pattern>
                           <shadedPattern>${shaded.package}.javax.ws.rs</shadedPattern>
                        </relocation>
                        <relocation>
                           <pattern>jersey.repackaged</pattern>
                           <shadedPattern>${shaded.package}.jersey.repackaged</shadedPattern>
                        </relocation>
                        <relocation>
                           <pattern>net.</pattern>
                           <shadedPattern>${shaded.package}.net.</shadedPattern>
                        </relocation>
                     </relocations>
                     <artifactSet>
                        <!-- these external dependencies should be exposed to clients -->
                        <excludes>
                           <exclude>org.slf4j:slf4j-api</exclude>
                           <exclude>org.bitguiders.cpp:cpp-product-usage-ingest-gateway-client</exclude>
                        </excludes>
                     </artifactSet>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>