Каждый раз, когда я делаю даже самые незначительные изменения в моем POM Intellij, удаляется расширение .war для моего взорванного артефакта в настройке выходного каталога структуры проекта. Это вызывает ошибку в конфигурации Intellij Run/Debug:
Артефакт "XXXX: война взорван" имеет недопустимое расширение.
Чтобы решить проблему, я должен вручную переопределить параметр выходного каталога структуры проекта. Каждый раз, когда я делаю даже самые незначительные изменения в POM, я должен вернуться к настройке каталога "Выход" и вручную добавить ".war" в конец настройки каталога "Выход". Это становится очень старым и разочаровывающим.
например. Я должен изменить это:
E:\Workarea\Enterp\приложения\цель\приложения
:
E:\Workarea\Enterp\приложения\цель\application.war
Если я вручную настрою конфигурацию выходного каталога Maven WAR 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}.war</outputDirectory>
</configuration>
</plugin>
Как я могу решить эту проблему?
EDIT:
Здесь полная конфигурация сборки:
<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>
SECOND EDIT:
Я обнаружил, что одним из решений является добавление ".war" к ${project.artifactId} в конфигурацию сборки, например:
<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>
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Если вы используете это обходное решение, просто знайте, что при развертывании артефакта неизученной войны имя файла будет называться XXXX.war.war. Он работает - я использовал артефакт в качестве файла WAR в Intellij, но он уродлив.
INFO [org.jboss.as.server.deployment] (поток обслуживания MSC 1-7) JBAS015876: Запуск развертывания "XXXX.war.war" (runtime-name: "XXXX.war.war" )
Если кто-то может сказать мне, как настроить проект Intellij на работу с Maven для выбора одного или другого значения finalName в зависимости от того, развертываю ли я WAR файл или взорванный артефакт, тогда этот вопрос будет достаточно отвечен.
<!-- Exploded artifact -->
<finalName>${project.artifactId}.war</finalName>
<!-- WAR file (unexploded) artifact -->
<finalName>${project.artifactId}</finalName>