Maven-2:如何更改依赖项的位置?

时间:2013-01-22 15:58:42

标签: maven maven-2 dependencies dependency-properties dependency-management

默认情况下,Maven将从本地存储库(.m2目录)中获取所有依赖项。但相反,我希望它从另一个位置获取依赖项。这甚至可能吗?

我不想用一切来做这件事。我不希望这发生在" root"或父级。我希望这更多地发生在更深层次的" pom级别。不止一次相同的依赖依赖。每次,我希望它来自不同的位置。因此,一个将使用默认的maven配置并从.m2目录获取它,另一个将从特定目录获取它。


我的理由:

在安装阶段,所有内容都安装到.m2目录中。在包阶段,我将所有内容打包到目标目录中。 (我不正确吗?)

我的.m2目录有很多需要。我的目标是我的最终项目没有额外的"事情"包含在.m2目录中。目标目录中的任何内容都是最终产品。当我处于编译阶段时,我不希望它依赖于.m2目录,而是取决于目标,因为那是我真正的最终项目。

<小时/> 我在Linux(Red Hat)上使用Maven 2.2.1。

我已经在某处读过您可以在<scope>文件的<dependency>元素下使用值{b> system 的pom.xml元素。然后在<systemPath>下的另一个名为<dependency>的元素中给出实际位置。我不会回答我的问题,或者这个问题是完全不同的。

我知道这违反了Maven的建议,但我有我的理由。

2 个答案:

答案 0 :(得分:2)

请先阅读我对此different, but related, question的回答。

一般来说,人们在Maven方面已经形成了肌肉记忆。举个例子,几乎每个人都认为这是你用Maven构建项目的方式:

$ mvn clean install

现在它将构建项目,但它也将构建的工件存储在本地存储库中..如果您打算在子模块上工作并希望始终安全地重建所有内容,那么这很好,或者如果您使用的IDE对反应堆了解不足(大多数IDE的较新版本没有此问题)

你应该做的是

$ mvn clean verify

或者

$ mvn clean package -DskipTests

(第二个跳过测试,因为如果你不关心确保集成测试通过,你可能也不关心单元测试)

所以对我而言,听起来你只是输错了命令......

现在还有第二种可能性,即您可能正在构建一个未作为传递依赖项公开的“瞬态,中间”工件......在这种情况下,您可以在配置中添加<skip>true</skip>该特定模块中的maven-install-plugin(也考虑添加到maven-deploy-plugin)但是你需要确定模块不会通过传递依赖性泄漏或者所有地狱都会破坏

答案 1 :(得分:0)

转到您的maven安装目录,让我们说C:\apache-maven-2.2.1. 遍历bin目录 编辑 m2.conf 。 默认设置为

set maven.home default set maven.home default ${user.home}/m2

根据需要更改此内容。