我在一个大型代码库上工作,它的构建生成了在Karaf中加载的OSGi包。我们有很多PaxExam测试。所有这些现有测试都通过maven GAV加载特性。
我想编写一个测试,它的唯一目的是验证所有所需的包加载。测试方法本身可能是空的。
我只想通过特性名称来指定要加载的特性,而不是通过与该特性关联的maven工件来指定。
例如,这里有一个现有的配置选项块,类似于其他测试中的所有其他块:
@Configuration
public Option[] config() {
return new Option[] {
karafDistributionConfiguration()
.frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("zip")
.versionAsInProject())
.useDeployFolder(false).unpackDirectory(new File("target/paxexam/unpack/")),
systemProperty("sl.config.dir").value("${karaf.etc}"),
features(maven().groupId("com.att.detsusl").artifactId("usl-servicefactory-impl").type("xml")
.classifier("features").versionAsInProject(), "webconsole", "usl-servicefactory"),
logLevel(LogLevelOption.LogLevel.WARN),
when(Boolean.parseBoolean(System.getProperty("debug"))).useOptions(KarafDistributionOption.debugConfiguration("5005", true)),
keepRuntimeFolder()
};
}以下是相关features.xml文件的正文:
<feature name='usl-all'>
<feature>usl-servicefactory</feature>
</feature>我怎样才能改变以前的配置选项块,让它指定"usl-all“特性,而不必指定Maven GAV?
更新
不幸的是,我无法编写一个测试来验证某个特定的特性是否加载,而不经过那个不明显的路径。
尽管如此,我认为这是我所能做的最好的,除了我在这里遇到的另一个问题。
所提供的解决方案实际上不起作用,因为这个包的POM没有将工件指定为依赖项,因此"versionAsInProject()“实际上失败了。包的目的仅仅是声明特性及其包含的特性,它来自不同的包,后者将工件声明为依赖项。
我的目的是在声明包含特性的包中编写测试,即使它没有任何maven依赖项,或者产生除特性声明之外的任何工件。
我确实尝试了硬编码版本字符串ala‘version (“.”)来提供"versionAsInProject()“应该提供的版本。这确实有效,但这不是一个可以接受的解决方案。
于是,我尝试使用模块POM本身的GA和"versionAsInProject()“。这实际上是可行的,但我真的需要理解这是在做什么。引用的GA和特征名之间没有多大关系。是否有这样的基本想法:只要 GA存在于某个中,并且特性名称只查看所有声明的特性,那么引用哪个GA并不重要吗?
发布于 2017-10-25 13:09:41
你不能,你总是需要指定一个Maven GAV。所以,您需要做的是:用这个替换现有的特性定义块。
features(
maven()
.groupId("com.att.detsusl")
.artifactId("usl-servicefactory-impl")
.type("xml")
.classifier("features").versionAsInProject(), "usl-all"
)https://stackoverflow.com/questions/46918575
复制相似问题