Maven依赖项 - 如何基于类路径属性添加依赖项

时间:2013-02-18 12:37:52

标签: maven

是否无法根据类属性包含依赖项?例如。如果我正在构建一个我想要与任何客户系统集成的框架,那么客户使用的DB类型可能是一个变量,但是如果它可以获取数据源,我的框架可以使用它。所以在这种情况下,我的Maven项目应该能够通过将相应的DB war声明为依赖来与任何DB集成。

E.g。

<dependency>
   <artifactId>${database.artifactId}</artifactId>
   ....
</dependency>

但是这个database.artifactId本身将从可以访问客户代码的属性文件中读取,因此让父pom声明版本和artifactId的想法如上所述here可能不适合我的情况

是否有解决方法或这个用例本身如此错误?我强烈认为,如果我们构建一个更像客户可以集成的产品的框架,那么根据属性声明任何运行时依赖性的灵活性就应该存在。

谢谢,
稻谷

1 个答案:

答案 0 :(得分:0)

这不是Maven的完成方式。

如果在您编写可能使用不同依赖关系的框架时,如果您不以某种方式有条件地依赖于具体实现。这不起作用,因为依赖关系的确切列表是在构建时构建的(即,当您构建和安装框架的Maven工件时)。

相反,应该有一个特殊的Maven工件,它只描述了你需要的功能的接口。该工件通常包含框架所需的(Java)接口;这是你的框架所依赖的。

然后,当使用您的框架时,必须包含这些接口的具体实现 - 由使用您的框架的人员,因为只有他们知道他们使用哪个实现。

例如,在“Maven by Example”,章节"7.10.1. Programming to Interface Projects"中解释了这一点。


示例:

  • JDBC :接口是JDK的一部分,因此使用JDBC的框架不需要声明任何特殊的依赖项(如果JDBC不是JDK的一部分,那么你将依赖于Maven像“jdbc-api”或类似的神器。实际使用JDBC的软件必须依赖于它实际使用的任何JDBC驱动程序(Oracle,HSQL等)。