是否无法根据类属性包含依赖项?例如。如果我正在构建一个我想要与任何客户系统集成的框架,那么客户使用的DB类型可能是一个变量,但是如果它可以获取数据源,我的框架可以使用它。所以在这种情况下,我的Maven项目应该能够通过将相应的DB war声明为依赖来与任何DB集成。
E.g。
<dependency>
<artifactId>${database.artifactId}</artifactId>
....
</dependency>
但是这个database.artifactId
本身将从可以访问客户代码的属性文件中读取,因此让父pom声明版本和artifactId的想法如上所述here可能不适合我的情况
是否有解决方法或这个用例本身如此错误?我强烈认为,如果我们构建一个更像客户可以集成的产品的框架,那么根据属性声明任何运行时依赖性的灵活性就应该存在。
谢谢,
稻谷
答案 0 :(得分:0)
这不是Maven的完成方式。
如果在您编写可能使用不同依赖关系的框架时,如果您不以某种方式有条件地依赖于具体实现。这不起作用,因为依赖关系的确切列表是在构建时构建的(即,当您构建和安装框架的Maven工件时)。
相反,应该有一个特殊的Maven工件,它只描述了你需要的功能的接口。该工件通常包含框架所需的(Java)接口;这是你的框架所依赖的。
然后,当使用您的框架时,必须包含这些接口的具体实现 - 由使用您的框架的人员,因为只有他们知道他们使用哪个实现。
例如,在“Maven by Example”,章节"7.10.1. Programming to Interface Projects"中解释了这一点。
示例: