maven-war-plugin忽略<archiveclasses>

时间:2015-09-06 12:36:26

标签: maven war maven-war-plugin

<archiveClasses>选项无效。

运行mvn clean compile war:exploded会在classes目录中生成包含.class文件的war目录,并且它们也不会存档到lib目录中的jar中。 war:war会产生相同的结果。

插件配置:

...
<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.6</version>
  <configuration>
      <archiveClasses>true</archiveClasses>
  </configuration>
</plugin>
...

变通?

Maven版本3.3.3,maven-war-plugin版本2.6。

JIRA门票 - https://issues.apache.org/jira/browse/MWAR-355

这是有问题的项目:https://bitbucket.org/dmos62/raudondvaris

1 个答案:

答案 0 :(得分:1)

首先,你应该将普通配置移到pluginManagement block like this

 <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.6</version>
          <configuration>
            <archiveClasses>true</archiveClasses>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

如果您执行上述操作,则将使用以下内容在war存档中创建类:mvn clean compile war:war

~/ws-git/so-questions/so-5 (master)$ unzip -t target/web-1.0.0-SNAPSHOT.war
Archive:  target/web-1.0.0-SNAPSHOT.war
    testing: META-INF/                OK
    testing: META-INF/MANIFEST.MF     OK
    testing: WEB-INF/                 OK
    testing: WEB-INF/classes/         OK
    testing: WEB-INF/lib/             OK
    testing: WEB-INF/lib/commons-fileupload-1.1.1.jar   OK
    testing: WEB-INF/lib/commons-io-1.1.jar   OK
    testing: WEB-INF/lib/web-1.0.0-SNAPSHOT.jar   OK
    testing: WEB-INF/web.xml          OK
    testing: META-INF/maven/com.soebes.examples.so/web/pom.xml   OK
    testing: META-INF/maven/com.soebes.examples.so/web/pom.properties   OK
    testing: META-INF/INDEX.LIST      OK
No errors detected in compressed data of target/web-1.0.0-SNAPSHOT.war.

这也适用于您的通话mvn clean compile war:exploded

   └── web-1.0.0-SNAPSHOT
        ├── META-INF
        └── WEB-INF
            ├── classes
            ├── lib
            │   ├── commons-fileupload-1.1.1.jar
            │   ├── commons-io-1.1.jar
            │   └── web-1.0.0-SNAPSHOT.jar
            └── web.xml

这种行为的原因仅仅是因为使用war:warwar:exploded之类的目标,将不会启动生命周期,这意味着不会考虑pom中的配置。如果您希望对命令行调用进行配置,可以使用特殊配置进行命令行调用(ID default-cli是重要部分):

<project>
  <build>
    <plugins>
      <plugin>
        <groupId...>
        <artifactId...>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              .....
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

表示具有命令行调用的特殊配置。从Maven 3.3.1开始,可以使用多个命令行调用配置,如:

<project...>
  <build>
    <plugins>
      <plugin>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <executions>
          <execution>
            <id>first-cli</id>
            <configuration>
                 ....
            </configuration>
          </execution>
          <execution>
            <id>second-cli</id>
            <configuration>
                 ....
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

maven可以通过以下方式使用它:

mvn plugin:goal@second-cli
mvn plugin:goal@first-cli

另请参阅release notes for Maven 3.3.1