7

我们使用 git、maven 和 logback。

这意味着日志中的堆栈跟踪显示了包含堆栈跟踪中每一行的 jar 的实现版本(有关示例,请参见http://logback.qos.ch/reasonsToSwitch.html#packagingData )。

因此,如果我们可以将当前构建的 SHA1 打包到正在构建的工件清单中的该字段中,那么很容易从 git 中找到确切的源,该源生成包含源中该单独行的工件。

根据http://maven.apache.org/shared/maven-archiver/examples/manifestEntries.html的方法是<key>value</key>在 pom 的 maven-jar-plugin 部分中有一行。在我的情况下,这意味着

<Implementation-Version>FooBar</Implementation-Version>

这导致

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.3:jar (default-jar) on project axsFTP: Unable to parse configuration of mojo org.apache.maven.plugins:maven-jar-plugin:2.3:ja
r for parameter manifest: Cannot find setter, adder nor field in org.apache.maven.archiver.ManifestConfiguration for 'implementationVersion' -> [Help 1]

鉴于我可以从https://github.com/koraktor/mavanagaiata获取 SHA1,如何在 MANIFEST.MF 文件中正确设置它?

4

1 回答 1

12

检查<Implementation-Version>是否在<manifestEntries>元素内,而不是<manifest>元素内。

例子:

  <build>
    <plugins>

      <plugin>
        <groupId>com.github.koraktor</groupId>
        <artifactId>mavanagaiata</artifactId>
        <version>0.3.1</version>
        <executions>
          <execution>
            <id>git-commit</id>
            <phase>validate</phase>
            <goals>
              <goal>commit</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <archive>
            <manifestEntries>
              <Implementation-Version>${mvngit.commit.id}</Implementation-Version>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

    </plugins>
  </build>
于 2012-01-25T18:42:57.900 回答