POM にわずかな変更を加えるたびに、Intellij は、プロジェクト構造の出力ディレクトリ設定で展開されたアーティファクトの .war 拡張子を削除します。これにより、Intellij の実行/デバッグ構成でエラーが発生します。
アーティファクト 'XXXX:爆発した戦争' の拡張子が無効です。
この問題を解決するには、プロジェクト構造の出力ディレクトリ設定を手動でオーバーライドする必要があります。POM にわずかな変更を加えるたびに、出力ディレクトリ設定に戻り、手動で「.war」を出力ディレクトリ設定の末尾に追加する必要があります。これは非常に古くなり、イライラします。
たとえば、これを変更する必要があります。
E:\workarea\enterp\application\target\application
これに:
E:\workarea\enterp\application\target\application.war
Maven WAR プラグインの outputDirectory 構成を次のように手動で設定しても、まったく役に立ちません。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Output directory of artifact:war exploded keeps losing the .war extension -->
<outputDirectory>${project.build.directory}.war</outputDirectory>
</configuration>
</plugin>
この問題を解決するにはどうすればよいですか?
編集:
完全なビルド構成は次のとおりです。
<build>
<!-- Maven will append the version to the finalName (which is the name
given to the generated war, and hence the context root) -->
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation
processors -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Output directory of artifact:war exploded keeps losing the .war extension -->
<outputDirectory>${project.build.directory}/${project.artifactId}.war</outputDirectory>
<!-- Java EE 7 doesn't require web.xml, Maven needs to catch up! -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- The WildFly plugin deploys your war to a local WildFly container -->
<!-- To use, run: mvn package wildfly:deploy -->
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.wildfly.maven.plugin}</version>
</plugin>
</plugins>
</build>
2番目の編集:
解決策の 1 つは、ビルド構成で ${project.artifactId} に「.war」を追加することです。たとえば、次のようになります。
<finalName>${project.artifactId}.war</finalName>
プラグイン構成から outputDirectory を削除します。したがって、ビルド構成は次のようになります。
<build>
<!--
Maven will make finalName the name of the generated war.
NOTE: Output directory of artifact:war exploded keeps losing the .war extension
http://youtrack.jetbrains.com/issue/IDEA-86484
http://youtrack.jetbrains.com/issue/IDEA-95162
The solution is to append ".war" to ${project.artifactId}, below:
-->
<finalName>${project.artifactId}.war</finalName>
<plugins>
<!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation
processors -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Java EE 7 doesn't require web.xml, Maven needs to catch up! -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- The WildFly plugin deploys your war to a local WildFly container -->
<!-- To use, run: mvn package wildfly:deploy -->
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.wildfly.maven.plugin}</version>
</plugin>
</plugins>
</build>
免責事項: この回避策を使用する場合、展開されていない WAR アーティファクトを展開すると、ファイル名が XXXX.war.war という名前になることに注意してください。それは機能します-私はアーティファクトをIntellijのWARファイルとしてデプロイしました-しかし、それは醜いです。
INFO [org.jboss.as.server.deployment] (MSC サービススレッド 1-7) JBAS015876: "XXXX.war.war" (ランタイム名: "XXXX.war.war)" のデプロイメントを開始しています
Intellij プロジェクトを構成して Maven と連携し、WAR ファイルと展開されたアーティファクトのどちらを展開しているかに応じて、いずれかの finalName 値を選択する方法を誰かが教えてくれれば、この質問は十分に答えられます。
<!-- Exploded artifact -->
<finalName>${project.artifactId}.war</finalName>
<!-- WAR file (unexploded) artifact -->
<finalName>${project.artifactId}</finalName>