【问题标题】:Maven java project in eclipse doesn't see classes in same packageeclipse中的Maven java项目看不到同一个包中的类
【发布时间】:2012-05-16 09:38:50
【问题描述】:

我刚刚开始使用 maven 来尝试构建一个多模块项目。

除了 2 个小问题,一切都会好的。

使用 eclipse 向导创建一个新的 'simple J2EE' 原型的 maven 项目由于 eclipse 中的一个错误而失败,在查找原型时它会忽略代理设置 (https://bugs.eclipse.org/bugs/show_bug .cgi?id=348893)

解决方案是在命令行上创建我的项目,然后将生成的文件结构复制到我的工作空间内的“简单 maven”项目中 - 导入项目也失败了!

我真正的问题是以下

当我单击项目文件夹并“创建一个新的 java 类”时,它会将类放在错误的位置,根据它在 maven 架构中的位置(我是否选择了错误的选项?)。所以我移动它。

所以现在我创建了第二个类,它具有第一个类作为成员。这两个类显然都在同一个包命名空间内。但是从我的第二个开始,我看不到任何成员类的方法。

我猜我在我的 POM 或我的结构中做错了什么。

但我不知道什么,也不知道您可能需要什么信息来帮助我解决它。

现在我已经恢复到在 Eclipse 中将我的子模块创建为一个单独的包,使用 ANT 和各种 Eclipse 工具来指向所需的库等。然后当我完成测试时,我将项目转换为“maven” ' 项目。完成此操作后,我的父 POM 和子 POM 都在 eclipse 中验证 OK。但是,如果我决定扩展功能并在我的模块中添加一个新类,那么类文件最终会出现在错误的位置,我无法从中看到我的其他类(或它们中的这个新类)。

请帮忙。我喜欢 Maven 的想法并使用它来控制我的依赖项,顺便说一下,我将前往 ANT,也许学习 IVY 进行依赖项控制(尽管我对所有这些都感到有点沮丧让 maven 运行的斗争只是为了把它扔掉!)

我是否应该坚持使用 ANT/IVY 并忘记 maven,但为将来保留 maven 目录结构?

编辑。

所以我可能错过了一些东西......我只是再次尝试在 Eclipse 中创建一个简单的 maven 项目,这次我没有选择原型。 我已将新的“模块”放在父文件夹下。这不是我一直在做的,我已经创建了许多与我的父母处于同一级别的外部模块。我从父级(带有我的测试模块)中的有效 POM 中注意到它有一个部分和其他标签。我会通过将它添加到我的个人模块 POM 中来解决我的问题吗?

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    这是 Eclipse/Maven 怪异的结果,似乎是随机发生的。解决:

    右键单击项目并选择 Maven > 更新项目...

    【讨论】:

    • 克里斯,感谢您提供的信息。事实是我在玩 maven 时掉了很多头发,我已经回到了更简单的 ANT 设置(尽管掉头发可能与其他“活”的东西有关,例如小孩:)。有一天,当我决定将我当前选择的“图书馆”项目转换为单亲项目时,我会再试一次。现在虽然我没有时间在每次打开工作区时都在打架。
    • 谢谢你。它立即解决了我的问题。
    • 完美运行。软件很奇怪。
    • 帮助,我来了。在我稍微摆弄了一下 .pom 之后,我的一个 Maven 项目中突然发生了同样的事情。它也开始突然抛出 ClassNotFoundException。如果您发现自己处于类似情况,请先尝试一下,然后再仔细研究类路径等。
    • 你也可以运行为-> Maven clean / install
    【解决方案2】:

    查看您的 .classpath。 验证源文件夹和目标是否在 eclipse 期望的位置。

    一个例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" output="target/classes" path="src/main/java"/>
        <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
        <classpathentry kind="output" path="target/classes"/>
    </classpath>
    

    【讨论】:

    • 这个信息应该在我的 POM 中(父模块还是子模块?),还是应该在 Eclipse 中设置?如果我可以把它放在我的父 POM 中,有没有办法将它设置为所有项目都相同,而无需为每个项目“复制和粘贴”?不幸的是,关于 Maven 的文档通常似乎有点缺乏,有利于“约定优于配置”的方法,也就是说,如果我什至需要在我的 Maven 项目中声明一个类路径,它应该就在那里,不是吗?
    • eclipse有两种方法:只依赖pom,并从中生成.classpath和.project。或源代码控制 3 个文件。我更喜欢第二种方法,因为我厌倦了在 pom.xml 中遇到 eclipse 文件中所需的某些信息不可用的问题。考虑到这一点,我放在上面的代码应该是你的项目/.classpath 文件的内容。
    • 好的,我找到了 .classpath 文件(仅在“导航器”视图中可见)。但是我应该直接编辑它还是应该从项目属性对话框中设置它?您还建议对 3 个文件进行源代码控制(我猜您的意思是父 POM、特定项目 POM 和项目 .classpath 文件?)。下一个问题是为什么这不能自动工作(就像 eclipse 中的几乎所有其他东西一样)或者为什么从命令行创建的 maven 项目不包含所需的行?还是我错过了一个 Maven 步骤?
    • 我建议对这 3 个文件进行源代码控制。我不知道你是如何到达你现在的位置的,有几十种不同的方式来创建 eclipse/maven 项目,其中只有少数适​​用于两者。
    • 所以我已经编辑了文件(在一种情况下直接并使用 Eclipse 中的属性对话框),这两种方法似乎都有效。非常酷。答案已接受
    【解决方案3】:

    也许你的 .project 文件中有类似这样的配置:

    <buildSpec>
            <buildCommand>
                <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
                <triggers>full,incremental,</triggers>
                <arguments>
                    <dictionary>
                        <key>LaunchConfigHandle</key>
                        <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.wst.common.project.facet.core.builder.launch</value>
                    </dictionary>
                </arguments>
            </buildCommand>
            <buildCommand>
                <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
                <triggers>full,incremental,</triggers>
                <arguments>
                    <dictionary>
                        <key>LaunchConfigHandle</key>
                        <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch</value>
                    </dictionary>
                </arguments>
            </buildCommand>
            <buildCommand>
                <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
                <triggers>full,incremental,</triggers>
                <arguments>
                    <dictionary>
                        <key>LaunchConfigHandle</key>
                        <value>&lt;project&gt;/.externalToolBuilders/org.springframework.ide.eclipse.core.springbuilder.launch</value>
                    </dictionary>
                </arguments>
            </buildCommand>
            <buildCommand>
                <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
                <triggers>full,incremental,</triggers>
                <arguments>
                    <dictionary>
                        <key>LaunchConfigHandle</key>
                        <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.wst.validation.validationbuilder.launch</value>
                    </dictionary>
                </arguments>
            </buildCommand>
    

    为此配置(或您的其他项目之一)更改它:

    <buildCommand>
            <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.springframework.ide.eclipse.core.springbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      相关资源
      最近更新 更多