2012-06-05 67 views
1

所以我使用maven(用eclipse和地方实施Sonatype的的)不是很久以前,通过我虽然一切工作的初始疼痛越来越之后开始.. .. 显然不是 !的Maven无法找到工作区项目,JUnit中,其他库

我有我的主要项目POM和我所有的孩子POM(我使用的是“平”的层次结构,使所有的子项目都在同一文件夹作为父POM)。这似乎工作正常。

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

大部分的“Maven的”的东西似乎很好地工作,但我解决不了我的“子工程”已被释放到我的本地MS /存储库中的每一天,我开始了日食

的依赖并具有相同的问题,我无法解决所有个人图书馆以及我为他们使用的所有问题(如Log4j,DDlUtils等)的“导入”问题。

我认为maven的重点是我可以在库的导入声明中加入'groupID'和其他东西给子POM(或父POM)。然后当我运行 mvn安装 对父母时,所有的罐子自动下载。

但是,我发现我必须通过eclipse工作区重新插入到库(内部和外部)的构建路径,并将它们指向我作为maven似乎无法下载的库的位置随时随地找到

具体地与运行JUnit测试,我可以从工作区运行它们(使用运行作为junit的),它们都通过细。但是,如果我尝试使用 MVN测试 运行它们,我得到一个消息,说 java.lang中; NoClassDefFoundError的:组织/ JUnit的/断言 (这是从日食运行MVN测试或CLI中的相同) 与在 输出错误信息未能执行目标org.apache.maven.plugins:maven.surfire-插件:2.10:测试 的POM和震击在我的M2_REPO,我能找到它,当我在Sonatype的,为什么搜索无法找到属于自己系统一部分的东西,存在于它的回购中。

但是当我通过Eclipse运行,它指向一个独立下载的JUnit库这显然工作得很好。

我不知道你需要什么额外的信息,而我显然缺少无论是在M2E插件的东西,我的Maven的安装或Sonatype的。

请帮我开始松开我的头发! 并可能很快就会被迫返回的蚂蚁/常春藤溶液(但不希望有学习“又一工具”(在这种情况下,常春藤)。

在此先感谢

大卫。

PS。我是在Windows XP平台

编辑... 可我得到Maven构建和释放,即使它认为它是失败的试验(这是itn't的罐子和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测试时从eclipse运行)时通过...所以这几乎是一个解决方案... ...

+0

mvn surefire:help -Ddetail = true -Dgoal = test – DaveM

回答

1

听起来你需要让eclipse意识到有问题的项目是Maven项目。你可能为你的项目设置了POM,但是为了使m2e插件工作,你需要创建项目作为Maven项目('New' - >'Project ...' - >'Maven' - >'Maven Project ...'),或者通过右键点击它然后选择'Configure' - >'Convert to Maven Project'将其转换为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时,它帮了我很多。

+0

所以我需要再次尝试一个新项目,然后从我目前的东西中简单地复制所有类。当我有机会时,我会检查这一点,并且我将把它设置为一个具有适当的'孩子'树结构(而不​​是一个平坦结构)的单个项目,因为Eclipse似乎偏好这一点。一旦我测试了它(并且它可以工作,我会将你的回答标记为解决方案......如果我忘记了这个线程,那么现在尽管我回到了ANT(也许我会尝试使用常青藤?)David – DaveM

+0

Maven到底有没有什么运气? –

+0

我曾经给过肘部的maven,我尝试过下载几个项目的源代码,并且用maven安装甚至与它们一起失败(这似乎很奇怪)我没有真正的时间去完全调查,但是我已经提出了使用maven文件/文件夹结构的一点,所以当我准备好时,我应该能够将这些文件复制到完整的测试项目中。现在虽然我会坚持使用ANT(在我的清单类路径中产生了很长的jar列表,​​因为我动态地获取列表,并且为我的所有项目使用相同的代码,但这样做很脏但更快)。尝试常春藤? – DaveM

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顶部复制这起例子。

相关问题