如何告诉Maven更新manifest的捆绑版本?

rkttyhzu  于 2023-01-20  发布在  Maven
关注(0)|答案(1)|浏览(156)

我正在使用Maven构建Eclipse的插件,并且正在寻找一种方法来告诉Maven更新META-INF\MANIFEST.MF文件中的Bundle-Version。
诀窍在于,我需要一种干净的方式来完成它,这样以后的同事(甚至是我在几个月/几年后)就不会破坏最终的自动化构建。
下面是我的尝试:
使用"捆绑版本:${项目.版本} "在清单. MF中
从Maven的Angular 来看,这是可行的,但是我的Eclipse项目经常显示错误:指定的版本格式不正确(major. minor. micro. qualifier)
使用上述文件,但位于maven使用的另一个META-INF文件夹(名为META-INF-MAVEN)中,而不是原始文件夹中:

<resources>
    <resource>
        <directory>META-INF-MAVEN</directory>
        <targetPath>META-INF</targetPath>
        <filtering>true</filtering>
    </resource>
</resources>

这仍然是"工作",但所需的MANIFEST.MF文件的副本是远离我所寻找的。这是一个很大的陷阱,为未来的错误,如编辑原始的MANIFEST.MF文件和忘记maven的,导致一个错误的发布。
使用org. apache. maven. plugins在编译时从pom文件添加Bundle-Version标记:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
            <manifestEntries>
                <Bundle-Version>${project.version}</Bundle-Version>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

这是最有前途的方法,但是它只在原始MANIFEST.MF没有Bundle-Version行时才起作用,结果是Eclipse项目中再次出现错误。
所以,我来了,问你有什么想法。
谢谢。

fnvucqvd

fnvucqvd1#

下面的解决方案在META-INF/MANIFEST.MF中找到Bundle-Version:行,并将其替换为Maven项目版本。replacer maven插件用于此操作,但肯定有其他maven插件可以像find-and-replace-maven-plugin一样完成相同的工作。

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <id>update-manifest-version</id>
            <phase>process-resources</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <file>${basedir}/META-INF/MANIFEST.MF</file>
                <regex>true</regex>
                <replacements>
                    <replacement>
                        <token>Bundle-Version: .*</token>
                        <value>Bundle-Version: ${project.artifact.selectedVersion.majorVersion}.${project.artifact.selectedVersion.minorVersion}.${project.artifact.selectedVersion.incrementalVersion}.qualifier
                        </value>
                    </replacement>
                </replacements>
            </configuration>
        </execution>
    </executions>
</plugin>

相关问题