java9 兼容性_Java 9迁移期间找不到不兼容的类型,相等约束和方法

在将项目从Java 8迁移到Java 9时,遇到类型推断和模块化相关的问题。在使用dropwizard-core和guice的配置中,编译时出现类型不兼容和找不到过滤器方法的错误。问题出现在模块结构变更后,Maven编译报错,可能是由于Java 9的类型推断更改和模块系统的影响。已尝试更新编译器插件并构建module-info,但问题依然存在。Q1:类型推断的更改是否与模块化导致的编译问题有关?Q2:这是否需要代码更改,还是等待库升级支持Java 9?
摘要由CSDN通过智能技术生成

在将我们的项目之一迁移到 Java 9(内部版本9 + 181)时

,我遇到了一个特殊的问题,那就是在某些与类型推断和java-

module相关的库中,这种实现看起来不正确。我正在使用 dropwizard-core(1.1.0) 和 guice(4.1.0) 配置,如下所示:

public class CustomService extends io.dropwizard.Application {

public static void main(String[] args) throws Exception {

new CustomService().run(args);

}

// other initializations

@Override

public void run(CustomServiceConfig config, io.dropwizard.setup.Environment environment) throws Exception {

com.google.inject.Injector injector = createInjector(config, environment);

environment.jersey().register(injector.getInstance(SomeResource.class)); //line 45

environment.healthChecks().register("DBHealth", injector.getInstance(HealthCheck.class));

environment.servlets().addFilter("Filter-Name", SomeFilter.class)

.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");

}

private com.google.inject.Injector createInjector(CustomServiceConfig config, Environment environment) {

return com.google.inject.Guice.createInjector(new CustomServiceModule(config, environment));

}

}

public class CustomServiceModule extends com.google.inject.AbstractModule {

private final CustomServiceConfig serviceConfig;

private final Environment environment;

public CustomServiceModule(CustomServiceConfig serviceConfig, Environment environment) {

this.serviceConfig = serviceConfig;

this.environment = environment;

}

@Override

protected void configure() {

bind(SomeInterface.class).to(SomeInterfaceImpl.class);

..

}

}

通过以下组合,该配置对我而言运行良好:

Java 8 + Maven 3 +编译器插件3.6.1 [我们的原始设置]

Java 9 + Maven 3 +编译器插件3.7.0(已更新命令行和maven配置)

但是,当我切换到模块结构,然后尝试编译由这些类组成的Maven模块时,在以下过程中出现以下错误 mvn clean install :

[ERROR] ../service/service/CustomService.java:[45,29] incompatible

types: inference variable T has incompatible bounds

equality constraints: base.SomeResource

upper bounds: java.lang.Class>,java.lang.Object

[ERROR] ../service/service/CustomService.java:[56,31]

no suitable method found for

addFilter(java.lang.String,java.lang.Class< SomeFilter >)

[ERROR] method

io.dropwizard.jetty.setup.ServletEnvironment.addFilter(java.lang.String,javax.servlet.Filter)

is not applicable

[ERROR] (argument mismatch; java.lang.Class< SomeFilter > cannot

be

converted to javax.servlet.Filter)

我不确定为什么会发生这些错误,以及是否可能与使用中的模块结构有关。

Q1。 考虑到所使用的依赖项,是否有任何与类型推断相关的更改会影响模块结构更改(如果可能)的Maven编译?

同样在迁移时,我主要使用IntelliJ建议的自动模块名称来构造module-infoas:

module service {

// Internal modules which compile successfully

requires model;

requires util;

// Dependent library modules

requires httpcore;

requires guice;

requires guava;

requires dropwizard.core;

requires mongo.java.driver;

requires org.apache.commons.lang3;

requires javax.servlet.api;

}

Q2。

如果在迁移时这不是回归问题,为什么在我们之前的设置中没有失败?这是否还会在我们的服务中强制进行代码更改,或者如果有帮助,我们是否应该等待库移至模块?

注意 :已尝试研究依赖项版本和类实现的用法。它们在先前和当前设置中都是相同的。

让我知道我可以提供的任何其他信息。

更新 :我能够在我创建的微服务样本中复制相同内容,以将其与项目的其余部分隔离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值