我需要在Eclipse项目中配​​置什么来修复错误的"导入XXX无法解析"

Ete*_*ner 8 java eclipse cxf m2e

首先使用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;
Run Code Online (Sandbox Code Playgroud)

但Eclipse目前的项目配置似乎是盲目的com.yourcompany.sample.ns,不知道在哪里找到它.

我尝试在Build Path中找到一个选项来指向生成的源,但没有尝试过我所帮助的.

我有一种感觉,我错过了一些非常微不足道的东西,但它是什么?

另外,不应该m2e(Eclipse的Maven插件)自动处理那种移动的实现文件?

更新(尝试@ Patrick建议的解决方案后):

  1. target/generated/src/main/java 不存在,但检查"创建新文件夹"框,我能够创建它.
  2. 但是,在pom.xml> Run As>上Maven clean,它被删除(因此需要在每次清理后重新创建???)
  3. 如果不在干净后重新创建,请执行pom.xml> Run As> Maven install,在完全不同的树下创建生成源:generated-sources/cxf/com/yourcompany/sample/ns.为什么???
  4. 然而,该RegistryResourceImpl.java模块仍然自动创建target/generated sources.在这一点上,我不再看到关于"未解决的包/进口/符号"的抱怨(奇怪).
  5. 但是......一旦它被移动到非目标文件夹/包,即src/main/java下的com.yourcompany.sample.ns,"import com.yourcompany.sample.ns.RegistryType;" 无法再解决!

另一方面,如果我尝试添加作为"源文件夹"的实际生成的路径generated-sources/cxf/com/yourcompany/sample/ns(而不是不相关/不存在target/generated/src/main/java,生成的树target被移动(删除)到下面/src/main/java.我不明白这种行为日食.

最后,即使我在这里做了Maven> Update Project建议,从而摆脱了"Maven 2项目错误图标",该模块仍然显示未解决的符号,尽管整个项目构建完美!RegistryResourceImpl.java

有什么可以解释这个?

有可能build-helper-maven-plugin是不完整甚至破碎?

有没有办法让CXF + build-helper-maven-plugin与Eclipse协调工作,这样即使项目构建成功,我也看不到那些令人不安的红色下划线"未解决的符号"?

Pat*_*ick 7

您需要在Eclipse中为生成的源添加源文件夹.该教程在其评论中提到了这一点:"注意:M2Eclipse似乎没有在这个源文件夹中找到,所以你必须在eclipse中手动添加它." 如果您按照教程中的说明进行操作,则需要添加的位置(相对于项目目录)

target/generated/src/main/java
Run Code Online (Sandbox Code Playgroud)

要添加文件夹,请打开项目属性,然后从左侧菜单中选择"Java Build Path".在"源"选项卡中,按"添加文件夹..."按钮,然后选择"target/generated/src/main/java"作为源文件夹.

请注意,Maven在运行时不会删除生成的文件夹mvn clean install.您可能希望在运行此命令时将Eclipse配置为刷新资源,以避免出现不一致.Eclipse运行配置包括一个"刷新"选项卡,允许您启用"完成后刷新资源".

您可能考虑的另一个选择是跳过使用Maven来满足您的wsimport需求.我会直接调用wsimport,将生成的工件放在你的src/main/java文件夹下,并完成它.除非你真的需要为每个构建重新生成工件,否则我认为Maven插件比它的价值更麻烦.


Ant*_*oly 3

如果在 clean 后没有重新创建,请执行 pom.xml > Run As > Maven install,在完全不同的树下创建生成源: generated-sources/cxf/com/yourcompany/sample/ns。为什么???

您需要配置cxf-codegen-plugin将生成的代码输出到所需的文件夹。

...
<configuration>
    <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
    ...  
</configuration>  
Run Code Online (Sandbox Code Playgroud)

然后安装 cxf-codegen-plugin 的连接器(即,如果可用)或使用 maven build-helper-maven-plugin及其连接器。确保sources指向与 相同的位置sourceRoot

<configuration>
    <sources>
        <source>${basedir}/target/generated/src/main/java</source>
    </sources>
</configuration>
Run Code Online (Sandbox Code Playgroud)

ps:要安装/发现连接器,请转到Preferences -> Maven -> Discover

  • 到目前为止,这似乎是关于如何更改生成源的路径的最佳技巧。看来我需要攻读博士学位了。在每个 Maven **插件** 中...是否有一个中心参考可以提供从 A 到 Z 的食谱,说明如何正确配置具有每个此类插件的特性和要求的 Maven 项目? (2认同)