搬运君又来搬运优质的 Discussions 啦,来源于 GitHub TeslaCN
TeslaCN:
大家好
由于最新的 LTS Java 17 已经发布,所以最好支持
用 JDK 17 构建 ShardingSphere。我已经升级了一些插件来
支持 Java 17,但仍然存在一些问题。
在一些单元测试中,我们
像下面的代码那样通过反射来改变 Field 的修饰符,这是从 Java 12 开始不允许的。它会
导致java.lang.NoSuchFieldException: modifiers
.
private static void setFinalStatic(final Field field, final Object
newValue) throws NoSuchFieldException, IllegalAccessException {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
临时解决方案是忽略
在使用 Java 12 或更高版本时更改 Field 修饰符的测试:
shardingsphere/shardingsphere-infra/shardingsphere-infra-executor/pom.xml
Lines 64 to 85 in ebe58d2
<profiles>
<profile>
<id>jdk12+</id>
<activation>
<jdk>[12,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<!-- TODO Consider refactoring tests which changed Field's modifiers -->
<exclude>org.apache.shardingsphere.infra.executor.sql.log.SQLLoggerTest</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
我对这个问题有两个想法:
- 像这样重构测试:https : //stackoverflow.com/a/69418150/7913731
- PowerMock 重构测试。
我想就这个问题征求意见。
已发送有关此讨论的电子邮件:https :
//lists.apache.org/thread.html/r944c3deb27755cb3e0314fea40aa366b7e7c4ea5c6388cd5fa5febcd%40%3Cdev.shardingsphere.apache.org%3E
为了中文开发者更好的查阅,讨论已经翻译成中文
详情链接点击 这里