我在OSGi项目中有一些模块。
payment
- payment-api
- payment-impl
payment-api
中的我有界面UserService
public interface UserService{
String method1(String p1, int p2);
String method2(String p1);
}
实施
public class UserServiceImpl implements UserService{
@Override
public String method1(String p1, int p2){
//code
returnt result;
}
@Override
public String method2(String p1){
//code
returnt result;
}
}
我的模块payment-impl
具有依赖性
<dependency>
<groupId>mydomain</groupId>
<artifactId>payment-api</artifactId>
<version>1.0.0</version>
</dependency>
工作正常。但是现在,如果我尝试将新mrthod添加到UserService
并在UserServiceImpl
中覆盖此方法后出错:
public interface UserService{
String method1(String p1, int p2);
String method2(String p1);
String test(int a);
}
和
@Override
public String test(int a) {
return "sdfsdff";
}
java:[94,9] method does not override or implement a method from a supertype
但如果我删除@Override
注释,一切正常。我不明白为什么?怎么会这样?
interface Y{
String method();
}
public class X implemets Y{
@Override
String method(){
return "some string";
}//is error
//------
String method(){
return "some string";
}//is fine
}
如果我没有实现这个方法编译器发誓。默认情况下,IDE使用注释覆盖methosd。另一种已经实现的方法在没有注释的情况下工作正常
答案 0 :(得分:1)
impl
模块可能正在引用api
模块的陈旧版本。您可能希望重命名版本1.0.0-SNAPSHOT
,清除本地maven存储库(通常位于~/.m2/repository
中),然后清理并重建产品。
我不确定是否在SNAPSHOT
后缀版本很重要,但在产品开发过程中这样做并不是一个坏习惯。
我也不确定为什么你可能会遇到模块的陈旧版本。要真正深入研究这个问题,我建议:
mvn install
而不能只依赖IDE编译过程,我不确定。