我正在跟随这个CXF使用契约优先教程。
一切都进行得很顺利,包括从WSDL生成源代码,使用build-helper-maven-plugin
,但当到达“实现服务”的时候,即将生成的RegistryResourceImpl.java
移动到正常的源代码文件夹src/main/java
时,Eclipse开始抱怨一些符号(如接口RegistryResource
)未被识别。
意识到正常的src/main/java
文件夹被分配了不同的包名,我只需在RegistryResourceImpl.java
中添加导入RegistryResource.java
所属的包的语句:
import com.yourcompany.sample.ns.RegistryResource;
但是,当前项目配置下的Eclipse似乎无法识别
com.yourcompany.sample.ns
,不知道该从哪里找到它。我尝试在构建路径中寻找选项来指向生成的源代码,但是我尝试的所有方法都没有帮助。
我觉得我可能错过了一些非常琐碎的东西,但是它是什么?
此外,
m2e
(适用于Eclipse的Maven插件)难道不应该自动处理这种移动实现文件的情况吗?更新(尝试@Patrick建议的解决方案后):
target/generated/src/main/java
文件夹不存在,但勾选"创建新文件夹"后,我成功创建了它。- 然而,在pom.xml > Run As >
Maven clean
之后,它会被删除(所以每次都需要重新创建???) - 如果不在clean之后重新创建,那么在pom.xml > Run As >
Maven install
中,生成的源代码将被创建在一个完全不同的路径下:generated-sources/cxf/com/yourcompany/sample/ns
。为什么??? - 然而,
RegistryResourceImpl.java
模块仍然自动创建在target/generated sources
下。此时,我不再看到关于"未解析的包/导入/符号"的投诉(奇怪)。 - 但是...一旦它被移动到非target文件夹/包中,即com.yourcompany.sample.ns在src/main/java下,"import com.yourcompany.sample.ns.RegistryType;"再次无法解析!
generated-sources/cxf/com/yourcompany/sample/ns
添加为“源文件夹”(而不是不存在的 target/generated/src/main/java
),则在 target
下生成的树会被移动(删除)到 /src/main/java
下。我不理解 Eclipse 的这种行为。最后,即使我按照 此处 建议执行
Maven
> 更新项目
,从而摆脱“Maven 2 项目错误图标”,RegistryResourceImpl.java
模块仍然显示未解析的符号,尽管整个项目构建完全正常!
这是什么原因呢?
build-helper-maven-plugin
可能不完整或甚至损坏了吗?是否有一种方法可以使 CXF +
build-helper-maven-plugin
与 Eclipse 和谐工作,以便即使项目成功构建,也不会看到那些令人不安的“未解析符号”的红色下划线?