maven-war-插件忽略<archiveClasses>
maven-war-plugin ignores <archiveClasses>
<archiveClasses>
选项无效。
运行 mvn clean compile war:exploded
生成一个 war 目录,在 classes
目录中包含 .class 文件,并且它们没有归档到 jar 中lib
目录都没有。 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.
首先你应该将普通配置移动到 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:war
或 war: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
<archiveClasses>
选项无效。
运行 mvn clean compile war:exploded
生成一个 war 目录,在 classes
目录中包含 .class 文件,并且它们没有归档到 jar 中lib
目录都没有。 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.
首先你应该将普通配置移动到 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:war
或 war: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