Java 使用Maven和Maven bundle插件在JAR清单中添加SVN修订时出错

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

我正在尝试在我的项目清单中添加SVN修订号。为此,我使用Maven build number插件并在超级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.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