1

仍然与 Maven 开玩笑。我的目标是一样的:

应用程序提供:

  1. JAR 形式maven-assembly-plugin
    • checksum-maven-plugin由WAR生成的内部存储的校验和文件
  2. WAR 文件来自maven-war-plugin

经过一些改进,我完成了 2 个模块项目。我看到两个选项:

1. Option:
    parent
      - module 1 for WAR (+ checksum-maven-plugin)
      - module 2 for JAR (with dependancy)
2. Option:
    parent
      - module 1 for WAR
      - module 2 for JAR (with dependency to WAR + checksum-maven-plugin)

我选择了选项 1。我的父母:

modules -> deploy-webapp
        -> deploy
plugin -> compiler

我的模块1:

set parent -> ...
plugin -> maven-war-plugin -> execution -> compile -> war
plugin -> checksum-maven-plugin -> execution -> package -> files

我的模块 2:

set parent -> ...
plugin -> maven-assembly-plugin -> execution -> package -> single

以上生成了3个我感兴趣的文件(工作正常):

module 1 -> target/webapp.war
module 1 -> target/webapp.war.md5
module 2 -> target/deploy-jar-with-dependances.jar

问题:

我需要 JAR 文件中的校验和。如果创建的所有东西都是一些人工制品,那么这个校验和人工制品也是吗?如果是的话,maven-dependency-plugin应该做的工作。但如果我要去(在模块 2 内):

maven-dependency-plugin -> copy-artifact:package:copy-> net.ju-n.maven.plugins:checksum-maven-plugin -> ${basedir}/src/main/resources

它复制插件的内容,而不是由插件创建的工件......

4

1 回答 1

1

我发现考虑在哪里放置配置需要与考虑代码相同的决定。因此,对于给定的事物,使用该事物的代码应该处理该事物。

换句话说,您应该选择选项 2 - WAR 不关心校验和,那么它为什么要生成它呢?

相反,您应该在 JAR 项目中计算校验和。该插件有一个很好的files目标。这是一个适合您的最小示例。

          <plugin>
                <groupId>net.ju-n.maven.plugins</groupId>
                <artifactId>checksum-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>files</goal>
                        </goals>
                        <phase>prepare-package</phase>
                    </execution>
                </executions>
                <configuration>
                    <fileSets>
                        <fileSet>
                            <directory>PATH_TO_WAR</directory>
                            <includes>
                                <include>test.txt</include>
                            </includes>
                        </fileSet>
                    </fileSets>
                    <individualFilesOutputDirectory>PATH_TO_WAR</individualFilesOutputDirectory>
                </configuration>
            </plugin>

请注意,在将 WAR 复制到 JAR 项目(以便文件存在)之后,应该执行此插件,特别是:

  • 如果它们处于不同的阶段,它应该发生在以后的阶段
  • 如果它们处于同一阶段,则它应该位于POM 中的 WAR 复制执行定义之后,因为 Maven会按照在 POM 中遇到它们的顺序运行绑定到同一阶段的插件目标执行。
于 2013-09-13T18:40:26.507 回答