Maven无法发现工作区项目,junit,其他库

时间:2012-06-05 09:43:59

标签: maven windows-xp m2e

所以我开始使用maven(使用eclipse,以及Sonatype的本地实现)不久前,在经历了最初的痛苦之后我虽然一切正常......但显然没有!

我有我的主项目POM和我所有的孩子POM(我使用的是'flat'层次结构,因此所有子项目都与父POM位于同一个文件夹中)。这似乎工作正常。

在我开始使用Maven之前,所有已启动并“发布”并测试的子项目。我去了maven来解决我的“依赖”问题......或者更确切地说,在这种情况下让它们更复杂。

大多数'Maven'的东西似乎工作得很好,但是我无法解决已发布到我的本地ms / repository中的'子项目'的依赖性

每天我都会启动eclipse并遇到同样的问题,我在所有个人库中都“无法解析导入”,以及我为它们使用的所有库(例如Log4j,DDlUtils等)。

我认为maven的全部意义在于我可以为库添加一个导入声明,将'groupID'和其他内容添加到子POM(或父POM)。然后让我在运行时自动下载所有罐子     mvn安装 反对父母。

然而,每天我发现我必须通过eclipse工作区重新插入库(内部和外部)的构建路径,并将它们指向我已经下载的库的位置,因为maven似乎无法找到他们在任何地方。

特别是在运行Junit测试时,我可以从工作区运行它们(使用run as junit),它们都可以正常运行。但是如果我尝试用它们运行它们     mvn测试 我收到一条消息说     java.lang; NoClassDefFoundError:org / junit / Assert (从运行mvn测试或CLI的eclipse中可以看出这一点) 输出中的错误消息     无法执行目标org.apache.maven.plugins:maven.surfire-plugin:2.10:test POM和jar都在我的M2_REPO中,当我在sonatype中搜索时,我可以找到它,为什么maven找不到属于它自己系统的东西,存在于它的repo中。

但是当我通过eclipse运行并将其指向一个独立下载的junit库时,这显然可以正常工作。

我不知道你可能需要什么额外信息,而且我显然在m2e插件,我的maven安装或者sonatype中都缺少了一些东西。

请帮助我开始松开头发! 并可能很快被迫返回蚂蚁/常春藤解决方案(但不想学习'另一种工具'(在这种情况下是常春藤)。

提前致谢

大卫。

PS。我在Windows XP平台上

...编辑 我可以让maven建立并释放jar和pom,即使它认为它没有通过测试(这不是因为我手动操作它们并且它们通过了很好)。

如果我查看我父POM的“有效POM”标签,则上面提到的插件不在那里。我想这意味着它是一个maven配置设置,但我在哪里添加它,为什么当我运行我的第一组maven测试时它不是自动的?

编辑2 ....

我刚刚在apache插件评论页面(http://maven.apache.org/plugins/maven-surefire-plugin/plugin-info.html)上找到了这个,所以我在CLI上运行了代码,mvn surefire :help -Ddetail = true -Dgoal =测试下载了大量的东西,现在测试运行了,但是它们在maven中失败了? (记得他们在使用'run as junit test'从eclipse运行时通过...所以这几乎是一个解决方案...

2 个答案:

答案 0 :(得分:1)

听起来你需要让eclipse知道有问题的项目是Maven项目。您可能为项目设置了POM,但要使m2e插件正常工作,您需要将项目创建为Maven项目('New' - >'Project ...' - >'Maven' - &gt ;'Maven Project ...'),或者通过右键单击它然后选择'Configure' - >将其转换为Maven项目。 '转换为Maven项目'。您将知道项目已被识别为Maven项目,因为其图标的左上角会有一个蓝色的“M”,如下面的屏幕截图所示:

Some Maven eclipse projects

上图中要注意的主要内容是“Maven Dependencies”库。这是由m2e插件自动设置的。每当您向POM添加依赖项时,项目的构建路径将自动配置,但有时您可能需要强制它通过右键单击项目并选择“Maven” - >来执行此操作。 '更新Maven配置'。重要的是,如果一切正常,那么您就不应该自己更新构建路径。切换,如果您自己更新,那么下次运行“更新Maven配置”命令时,您所做的任何更改都可能会被覆盖。

另外值得注意的是,两个依赖项'mavenProjectTest'和'primes'旁边有文件夹图标。这意味着它们已被选为工作空间项目。为此,项目必须启用“工作区分辨率”,并且要拾取的项目也需要配置为m2e Maven项目。

您提到下载外部库。您不需要自己下载任何库 - 通过为外部库添加正确的依赖声明,然后Maven将从您配置的远程存储库下载它(无论如何 - 然后它将能够从您的本地存储库获取它) )。默认情况下,这是Maven Central repository。要在项目中添加外部库,只需按照该链接,在搜索框中输入库,单击所需版本的版本链接,然后您将进入一个页面,其中将出现依赖关系XML声明可以复制并粘贴到您的POM中。

可能有用的另一件事是您应该确保源文件夹遵循Maven默认目录结构。也就是说,您的测试包应该包含在名为'src / test / java'的源文件夹中,主项目包应该放在'src / main / java'中。否则,Maven将不知道在哪里可以找到您的源代码。可以配置POM以告诉Maven期望您的源代码位于不同的源文件夹中,但强烈建议您遵循标准的Maven目录结构。

由于你有子模块,我的建议是通过从头创建一个新的Maven项目来简化事情,你可以玩。一旦你对此感到满意,那么试着让m2e为你的多模块项目工作。

我记得你在第一次掌握Maven时的痛苦,但是一旦你理解了它正在做什么并且一切正常,那就太棒了。我强烈建议您阅读免费的在线书籍Maven: The Complete Reference - 当我开始使用Maven时,它帮助了我很多。

答案 1 :(得分:0)

感谢我所在组织的Maven专家,我已经体验过相同的信息,并找到了可行的解决方案。

这是我的pom.xml 重现您的错误:

  <dependencies>
    <dependency>
        <groupId>org.junit4</groupId>
        <artifactId>org.junit4</artifactId>
        <version>4.3.1</version>
    </dependency>
  </dependencies>

有了它,我会收到package org.junit does not exist条消息和NoClassDefFoundError: org/junit/Assert。与您的体验类似,它在Eclipse,绿色条和所有项目中运行良好。

以下是pom.xml 有效:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

我从使用JUnit page

顶部的示例中复制了此内容