Java 使用Maven和Maven bundle插件在JAR清单中添加SVN修订时出错
我正在尝试在我的项目清单中添加SVN修订号。为此,我使用Maven build number插件并在超级POM中添加了以下几行:Java 使用Maven和Maven bundle插件在JAR清单中添加SVN修订时出错,java,svn,maven,buildnumber-maven-plugin,maven-bundle-plugin,Java,Svn,Maven,Buildnumber Maven Plugin,Maven Bundle Plugin,我正在尝试在我的项目清单中添加SVN修订号。为此,我使用Maven build number插件并在超级POM中添加了以下几行: <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifac
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Implementation-Build>${buildNumber}</Implementation-Build>
</instructions>
</configuration>
</plugin>
...
</plugins>
</pluginManagement>
<plugins>
<!-- Gets the SVN revision number -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<providerImplementations>
<svn>javasvn</svn>
</providerImplementations>
</configuration>
-</plugin>
</plugins>
</build>
org.codehaus.mojo
buildnumber maven插件
1.1
验证
创造
假的
假的
javasvn
org.apache.maven.plugins
maven jar插件
2.1
真的
${buildNumber}
请注意配置:
false
假的
我这样做是有意的,因为如果我有本地修改,“doCheck”将阻止我编译(我想在提交工作之前编译和测试)
“doUpdate”对我来说也是个问题,因为我不一定要从存储库更新代码。与上述原因相同,我希望在提交(并可能解决冲突)之前进行本地测试
我的问题是,在清单中,出现的是:
实现生成:${buildNumber}
因此,不解释变量。我错过了什么
谢谢
编辑:
事实上,问题在于maven bundle插件。我在projets中使用它来生成OSGi包
因此,项目的POM包装为:
bundle
而不是:
jar
我想这会扰乱Maven的生命周期。
当我删除maven bundle插件时,一切正常。但我无法删除它,因为我的应用程序是OSGi应用程序。您可以使用
在超级pom的
下添加插件定义,如下所示:
...
org.codehaus.mojo
buildnumber maven插件
1.1
验证
创造
假的
假的
javasvn
org.apache.maven.plugins
maven jar插件
2.1
真的
${buildNumber}
...
然后在您想要使用这些现在配置的插件的项目中,您将以下内容添加到poms中:
...
org.codehaus.mojo
buildnumber maven插件
maven jar插件
...
这应该能帮你解决问题。问题在于混合使用maven bundle插件和maven jar插件来操作jar清单 解决方案: 在超级POM中:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Implementation-Build>${buildNumber}</Implementation-Build>
</instructions>
</configuration>
</plugin>
...
</plugins>
</pluginManagement>
<plugins>
<!-- Gets the SVN revision number -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<providerImplementations>
<svn>javasvn</svn>
</providerImplementations>
</configuration>
-</plugin>
</plugins>
</build>
org.apache.felix
maven捆绑插件
2.3.7
真的
${buildNumber}
...
org.codehaus.mojo
buildnumber maven插件
1.1
验证
创造
假的
假的
javasvn
-
就这样 尝试使用配置/说明添加${buildNumber},而不是使用配置/归档,如下所示:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Implementation-Build>${buildNumber}</Implementation-Build>
</instructions>
</configuration>
</plugin>
org.apache.felix
maven捆绑插件
真的
${buildNumber}
有了你的方法和Maven 2,一切都成功了。我们切换到Maven 3,Maven bundle插件不满意(与您的行为相同)。这种方法奏效了。很抱歉,您的代码示例对我来说非常好。但我没有把它放在超级Pom里。直接进入创建罐子的pom。您是否将插件放在
或直接放在
下?直接放在下面可能是因为它位于超级pom中。。。但我不想编辑从这个超级POM继承的所有项目的所有POM…我尝试过。。。我仍然在清单中得到“Implementation Build:${buildNumber}”未解释的标记…@Ben Test和来自的
示例。尝试查看您的jar文件是否会在名称中包含buildnumber。我尝试了:在我模块的POM(而不是超级POM)中添加了“buildnumber-maven-plugin-1.1-r${buildnumber}”。它在目标目录中创建了以下JAR:buildnumber-maven-plugin-1.1-r${buildnumber}.jarOK,很难说为什么它不工作。尝试设置除buildNumber
之外的其他属性名。也许是名字冲突。在配置中使用此标记:myOwnBuildNumberName
并使用该属性。我也尝试了。。。在超级POM中:false-false-false-javasvn-myOwnBuildNumberName