所以我开始使用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运行时通过...所以这几乎是一个解决方案...
答案 0 :(得分:1)
听起来你需要让eclipse知道有问题的项目是Maven项目。您可能为项目设置了POM,但要使m2e插件正常工作,您需要将项目创建为Maven项目('New' - >'Project ...' - >'Maven' - &gt ;'Maven Project ...'),或者通过右键单击它然后选择'Configure' - >将其转换为Maven项目。 '转换为Maven项目'。您将知道项目已被识别为Maven项目,因为其图标的左上角会有一个蓝色的“M”,如下面的屏幕截图所示:
上图中要注意的主要内容是“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。
顶部的示例中复制了此内容