我们的OSGi / RCP应用程序使用包含带有2个配置文件的pom文件的外部项目:非p2构建(打包jar)的一个默认配置文件和p2构建的一个配置文件(打包eclipse-plugin)。
在eclipse中将该项目集成到RCP工作区时,将使用p2配置文件,因此项目使用清单。
pom看起来像这样:
<project ...>
<groupId>group-id</groupId>
<artifactId>project-id</artifactId>
<version>${project.version}</version>
<packaging>${project.packaging}</packaging>
. . .
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.packaging>jar</project.packaging>
<project.version>4.0.brabchintextformat-SNAPSHOT</util.version>
</properties>
. . .
<profile>
<id>p2</id>
<activation>
<file><exists>../p2</exists></file>
</activation>
<properties>
<project.packaging>eclipse-plugin</project.packaging>
<project.version>0.0.0-SNAPSHOT</project.version>
<tycho-version>0.24.0</tycho-version>
<p2-repo-url>http://download.eclipse.org/releases/mars/</p2-repo-url>
</properties>
. . .
并且MANIFEST.MF的版本为0.0.0.qualifier
使用该设置调用mvn install有效,但它警告该版本不是常量:
'version' contains an expression but should be a constant
备选方案1:不要使用version属性,并尝试在pom和manifest中使用相同的常量。但这是不可能的,因为将设置为常量的版本号格式不符合OSGi的版本号方案。
备选方案2:在p2配置文件中定义tycho.versions.plugin, 并在构建之前设置版本。我不喜欢那样因为它 强制可能错误提交的项目的本地更新 并推送到存储库。
备选方案3:使用单独的pom文件(pom-p2.xml):但事实并非如此 因为eclipse不允许将其作为maven项目导入。
备选方案4:使用tycho.pomless插件:这不起作用 因为如果pom.xml文件存在,它会使用它(没有 'ignorePOM'标志)。
有什么建议吗?