Dan*_*den 13 java maven-2 netbeans
好的,我以为我明白了如何使用Maven ......
我有一个主项目M具有子项目A,B和C. C包含一些常用的功能(主要是接口)A和B.我可以运行mvn compile jar:jar从项目的根目录(该M目录),并得到JAR文件A.jar,B.jar和C.jar.(目前所有这些工件的版本都是2.0-SNAPSHOT.)
主pom.xml在文件M目录列出C其下<dependencyManagement>的标签,以便A和B可以引用C由只包括一个参考,就像这样:
<dependency>
<groupId>my.project</groupId>
<artifactId>C</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我可以从命令行运行mvn compile,一切正常.但是,当我在NetBeans中打开项目时,它会抱怨问题:"某些依赖项工件不在本地存储库中",并且它表示缺少的工件是C.同样,从命令行,如果我更改为A或B目录并尝试运行,mvn compile我会得到"构建错误:无法解决工件".
我希望我可以手动转到我的C.jar构建和运行的位置mvn install:install-file,但我宁愿找到一个解决方案,使我能够直接在NetBeans中工作(和/或使用m2eclipse在Eclipse中).
我究竟做错了什么?
Pas*_*ent 23
Maven依赖于二进制依赖的概念,并通过本地存储库解析它们.换句话说,如果您之间存在依赖关系,则需要在本地存储库中"安装"软件包,编译和打包代码是不够的.为此,您需要运行install(将程序包安装到本地存储库,以便在本地作为其他项目的依赖项).
旁注:你不应该调用mvn compile jar:jar但更喜欢mvn package.首先,运行package阶段将触发package(包括compile)和package自身之前的所有阶段.其次,运行package将根据项目的值调用jar:jar,或者war:war等等<packaging>(检查生命周期的介绍以获取更多详细信息).这是Maven的一大优势:你不需要知道项目是JAR,WAR,EJB等,并且运行适当的目标来打包它.只需运行标准化package阶段,Maven即可完成工作(使用默认目标绑定).
这是Maven的理论部分.在IDE中,事情可能略有不同,使得使用Maven更方便.IDE可以使用项目依赖项(即依赖于IDE内部的代码)而不是二进制依赖项,以便在一个项目中进行的更改在其他模块中可见,而无需运行mvn install.这是Eclipse + M2Eclipse的情况.这也适用于以下条件下的NetBeans(请参阅依赖关系管理):
提示:如果您打开其他项目所依赖的项目,则其他项目中的图标将更改为"maven项目"图标,以表示IDE了解项目之间的链接.但是,仅当groupId,artifactId和version在依赖项和项目声明中都匹配时才建立此类链接.经常出现的问题是您在库项目中更改了API签名,但应用程序没有恢复.通常它是由应用程序使用旧版本的库工件引起的.工件图标可以帮助您追踪这些问题.
你需要运行mvn install而不是mvn compile.该install目标将编译和打包后,它内置的jar复制到本地存储库.如果只运行compile,它只会将类文件编译到target目录中,而不会使它们可用于其他项目.
在Eclipse中,如果从顶层导入pom,它会将子项目导入单独的Eclipse项目并设置相关项目的依赖项,然后设置每个项目的类路径以依赖其他项目.我不熟悉Netbeans,但我很确定有一些方法可以做同样的事情.
| 归档时间: |
|
| 查看次数: |
21778 次 |
| 最近记录: |