Idée Intellij artéfact 'XXXX: la guerre a éclaté' a une extension invalide

chaque fois que je fais même le plus petit changement à mon POM Intellij enlève le .extension de guerre pour mon a explosé artefact dans le cadre du répertoire de sortie de Structure de projet. Cela provoque une erreur dans la configuration Run/Debug D'Intellij:

artefact' XXXX: la guerre a éclaté ' a une extension invalide.

pour résoudre le problème, je dois modifier manuellement le répertoire de sortie de la Structure du projet. paramètre. Chaque fois que je fais même le plus petit changement au POM, je dois revenir au réglage du répertoire de sortie et l'ajouter manuellement ".de la guerre" à la fin de la Sortie répertoire de configuration. Cela devient très vieux et frustrant.

p.ex. je dois changer ceci:

E:workareaenterpapplicationtargetapplication

à ceci:

E:workareaenterpapplicationtargetapplication.de la guerre

si J'ai réglé manuellement la configuration du plugin maven WAR outputDirectory comme suit, cela n'aide pas du tout:

<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>

comment résoudre ce problème?

EDIT:

Voici la configuration complète de la construction:

    <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>

DEUXIÈME ÉDITION:

j'ai découvert qu'une solution est d'ajouter ".la guerre" ${projet.artifactId} dans le configuration de construction, par exemple:

<finalName>${project.artifactId}.war</finalName>

et supprimer outputDirectory de la configuration du plugin. Ainsi, la configuration de construction devrait ressembler à ceci:

<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>

avertissement: si vous utilisez cette solution de contournement, sachez que lorsque vous déployez un artefact de guerre non explosé, le nom du fichier sera appelé XXXX.guerre.guerre. Ça marche -- j'ai déployé l'artefact comme dossier de guerre à Intellij -- mais c'est moche.

INFO [org.jboss.as.serveur.déploiement] (MSC service thread 1-7) JBAS015876: début du déploiement de " XXXX.guerre.war " (runtime-name: "XXXX.guerre.de guerre)"

si quelqu'un peut me dire comment configurer le projet Intellij pour travailler avec Maven pour sélectionner une ou les autres valeurs finalName selon que je déploie un fichier de guerre contre un artefact explosé alors cette question sera suffisamment répondu.

<!-- Exploded artifact --> 
<finalName>${project.artifactId}.war</finalName>

<!-- WAR file (unexploded) artifact --> 
<finalName>${project.artifactId}</finalName>
21
demandé sur Patrick Garner 2014-07-13 22:01:16

4 réponses

il y a un moyen de corriger cela à IntelliJ, sans changer votre pom.fichier(s) xml, en ajoutant un artefact avec une référence à la guerre éclatée (ou dans mon cas, l'oreille éclatée) et il ne sera pas piétiné chaque fois IntelliJ ré-importe les pom maven(s). Voici comment:

  1. Stop/annuler le déploiement de votre artefact de déploiement

  2. éditez votre config run, et dans L'onglet de déploiement, supprimez le courant artefact de guerre et d'oreille

  3. ouvrez les paramètres des artefacts du projet et ajoutez un nouvel artefact Add new artifact

  4. utilisez le bouton plus pour ajouter une nouvelle guerre ou (dans mon cas) l'oreille a explosé artefact Add new war or ear exploded artifact

  5. lui donner un nom, puis éditer le répertoire de sortie pour ajouter l'extension appropriée (.guerre ou .oreille) Rename output directory to add extension

  6. dans la section output Layout où vous voyez <output root> , utilisez le bouton plus pour ajouter un artefact Add new artifact in output layout

  7. sélectionnez l'objet explosé désiré Select the desired exploded artifact

  8. Éditez à nouveau votre config run, et dans L'onglet déploiement, ajoutez le nouvel artefact explosé Deploy new artifact in run configuration

merci à Nikolay Chashnikov de décrire cela dans son commentaire sur le rapport de bug

31
répondu Alex Nauda 2014-12-23 00:28:01

en fait, vous devriez laisser l'attribut finalName seul, sinon vous obtiendrez les problèmes que vous décrivez. Vous devriez plutôt changer la configuration du plugin Maven war pour utiliser le webappDirectory comme ceci:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <webappDirectory>${project.build.directory}/${project.artifactId}.${project.packaging}</webappDirectory>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>
4
répondu Engineer Dollery 2014-07-15 19:38:00

si nous parlons de guerre à l'intérieur de L'oreille, il y a une autre façon de résoudre votre problème en utilisant la configuration correcte à l'intérieur de maven-ear-plugin. War pom.xml devrait être laissé tel quel, sans aucun changement, mais EAR pom.xml devrait contenir quelque chose comme ceci. (s'il vous plaît, prêtez votre attention à ${décompresser.les guerres} )

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <version>6</version>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <generateApplicationXml>false</generateApplicationXml>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <modules>
            <webModule>
                <groupId>com.test.app</groupId>
                <artifactId>test-app-war</artifactId>
                <unpack>${unpack.wars}</unpack>
            </webModule>
        </modules>
    </configuration>
</plugin>

et ensuite vous pouvez ajouter des profils par défaut et debug pour assemblage d'artefact correct.

<profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <unpack.wars>false</unpack.wars>
            </properties>
        </profile>
        <profile>
            <id>debug</id>
            <activation>
                <property>
                    <name>debug</name>
                </property>
            </activation>
            <properties>
                <unpack.wars>true</unpack.wars>
            </properties>
        </profile>
</profiles> 

utiliser debug profil à l'intérieur de IntelliJ IDEA pour l'expansion des guerres et des par défaut profil pour la construction d'artefacts en ligne de commande ou CI (profil par défaut serait d'être actif si aucun profil n'a été fournie, donc votre build fonctionne comme précédemment).

Maven Projects view

avec cette solution HotSwap et ressources les mises à jour fonctionnent comme prévu.

Espérons que cette aide.

2
répondu Taras 2015-10-06 09:21:39

je pense que c'est la même chose que cette question: artéfact IntelliJ A extension invalide

ajouter A.extension de guerre au répertoire de sortie comme indiqué dans ma réponse: https://stackoverflow.com/a/25569266/968988

-1
répondu Nicolas Zozol 2017-05-23 10:31:02