2012-06-05 132 views
0

我有2个项目,即Project_1Project_2。 这两个项目都是Maven,我正在使用Netbeans。在另一个Maven项目中包含Maven项目的Jar不起作用,但将该项目包括在另一个Maven项目中工作

我想包括Project_1Project_2,我正在做像this

问题是,当我包括jar我没有得到任何编译时错误,但是我在运行时得到一个NoClassDefFoundError异常。

当我通过执行here提到的步骤将Project_1包含在Project_2中时。 (The Open Project示例)。我没有得到任何错误。无论是运行时还是编译时间。

你能解释一下我在这里错过了什么吗?

更新

Project_2部署在服务器这是不是在我的本地机器上却Project_1是在我的本地机器。

Project_1纳入Project_2作为项目在我的本地计算机上进行测试。

+0

做后第二个选项,它也会在pom.xml中添加一个条目。请研究它在标记中添加了什么 – rizzz86

+0

@ rizzz86如果我包含该项目,则范围和systemPath将丢失。 – JHS

+0

那么这意味着如果你手动添加标签而没有使用scope和systemPath,那么它也可以工作吗? – rizzz86

回答

0

首先,一个好的经验法则是从不使用system scope and system path来引入依赖关系。根据我的经验总是有:-)

一个更好的办法

如果Project_2取决于PROJECT_1,那么首先安装它的罐子到本地存储库:

cd Project_1 
    mvn clean install 

观看,你会发现罐子输出放在某处在以下目录:

$HOME/.m2/repository 

一旦做到这一点的罐子将作为一个正常的依赖于第二内建

cd Project_2 
    mvn clean compile 

本地存储库确保项目现在彼此分离。假设您正在使用Project_1的快照修订版,Project_2版本将始终检索已构建和测试的最新修订版。

更新

您应该使用Maven repository manager共享机/团队之间的罐子。建议载于以下答案:

Share jar of the module with another team

如何配置Maven使用,如Nexus的仓库中描述了它的documentation

正如deploy plugin documentation描述你需要一个distributionManagement部分添加到您的POM(详细库的URL),然后上载该项目的jar到你的资料库,如下所示:

cd Project_1 
    mvn clean deploy 
+0

谢谢,但是有问题。 “Project_1”是我本地计算机中的一个项目,“Project_2”是部署在服务器中的项目。要在'Project_2'中包含'Project_1'的jar,我必须将'Project_1'的jar放到服务器的某个地方,并将其包含在'Project_2'中。 – JHS

+0

@Juniad然后,你需要安装一个Maven仓库管理器,并使用它来部署生成输出和拉取依赖关系。强烈建议您在共享罐子的同时也会提高构建的性能。请参阅http://stackoverflow.com/questions/9201195/share-jar-of-the-module-with-another-team/9202409#9202409 –

+0

你会如此善待编辑你的答案并添加链接? – JHS

相关问题