如何告诉Maven包含jar依赖项,而不是Eclipse中的子项目源目录?
我使用Apache Maven来管理我的Java库(jar)和一些使用libs的项目。 为了方便起见,我使用mvn eclipse:eclipse
生成Eclipse项目文件 ,可以将其导入Eclipse工作区进行编辑。
当我在同一个Eclipse工作区中编辑主项目和Java lib项目时出现问题。 也就是说, mvn eclipse:eclipse
包含.classpath
文件中的src路径依赖,而不是预期的jar
依赖。
假设我有一个名为mylib
的Jave lib项目。 相应的jar文件mylib.jar
已部署到由我维护的私有Maven mylib.jar
。 为了在主项目中使用mylib.jar, pom.xml
包含以下依赖项。
namespace.my mylib [1.0, )
mvn compile
和mvn test
工作完美,其中mylib.jar
会自动从我的repo下载。 但是,在尝试mvn eclipse:eclipse
,我发现生成的.classpath
文件不包含mylib.jar
依赖项。 相反,它包括mylib的源文件目录,如下所示。
似乎Maven读取Eclipse的元数据并找到mylib并且主项目在同一工作区中共存。 因此,maven包含了我的好处。 该死的。 如何告诉maven忽略本地项目源并只包含jar文件?
我相信这实际上是因为它们是Eclipse中的相关项目。 因此,如果您右键单击主项目并转到Project References
则应勾选您的lib项目。
如果运行mvn eclipse:eclipse
,它将自动为任何子项目(模块)添加项目引用。 您可以使用maven eclipse插件的useProjectReferences属性更改此设置。
它默认为true
,但是
设置为false时,插件不会创建子项目,而是使用本地存储库中已安装的包引用这些子项目
要使用该属性,请在pom.xml中设置该属性
org.apache.maven.plugins maven-eclipse-plugin 2.9 false
或者作为命令行上的属性:
mvn eclipse:eclipse -Declipse.useProjectReferences=false
我需要避免将依赖项包含在refrenced项目中,而是作为jar。 使用Eclipse 4.6 Neon以前的解决方案都不起作用。
我已经禁用了Workspace Resolution
function
click on the project -> Maven -> Disable Workspace Resolution
Eclipse需要知道本地maven存储库的路径。 因此,必须设置类路径变量M2_REPO
。 执行以下命令:
mvn -Declipse.workspace= eclipse:add-maven-repo
您还可以在eclipse中定义一个新的类路径变量:从菜单栏中选择Window > Preferences. Select the Java > Build Path > Classpath Variables page
Window > Preferences. Select the Java > Build Path > Classpath Variables page
。
然后通过执行mvn eclipse:eclipse
来构建项目
希望有所帮助!
感谢Hound Dog的提示。 是的, useProjectReferences控制Maven如何处理子项目 – 包括源目录或包含jar文件。
我没有安装Eclipse的maven插件,所以我在pom.xml
添加了以下配置。 它告诉Maven在本地maven repo中包含jar依赖,而不是源dir。 如果本地仓库中不存在所需的jar文件,它将自动下载。
org.apache.maven.plugins maven-eclipse-plugin 2.9 false
现在mvn eclipse:eclipse
按预期工作。
只需尝试在依赖标记内使用type元素,并提及source / jar作为pom.xml中的类型
namespace.my mylib [1.0, ) jar
我最近经历过这种行为是由pom.xml文件中声明的版本触发的。 如果您的主项目所依赖的lib版本可用于工作空间中的eclipse(例如,具有匹配的pom.xml [group,artifact,version]的项目),那么它将用作项目引用被从M2REPO位置拉出来的。
我的解决方案是将工作空间中的库pom.xml的版本更改为允许我改进lib的另一个版本,而主项目仍然从M2REPO中删除旧的lib。
通过对齐版本号来使用它可以让您轻松地执行并发工件改进/更改。
我还没有测试过你是否需要运行mvn eclipse:eclipse
每次更改lib pom.xml文件和主pom.xml依赖项时,我都希望它是这样的。
我尝试在eclipse中关闭项目并且工作区刚刚构建了自己,这次从存储库中取出jar而不是链接项目
- 如何在运行Tomcat时获取软件包版本?
- 如何在eclipse中禁用大括号({})的自动创建?
- 如何从XSD生成实现可序列化的类?
- 找不到Hibernateexceptionhibernate.cfg.xml
- Scala IDE错误 – 无法找到/加载主类
- 在null-reference上创建方法引用不会引发exception
- 配置Eclipse以将App Engine类预先捆绑到单个JAR中,以便更快地进行预热
- 使用Eclipse构建Android的原生Opencv,给出了“未定义的对`cvCreateFileCapture’的引用”
- Java SWT TreeViewer,其中一列需要为StyledText