Java 在Maven中使用阴影重定位重构导入语句
我一直在使用Shade将依赖项从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进行开发(或者你只是用
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>