it-swarm.com.de

Verwenden von Intellij zum Erstellen von War und zur Bereitstellung für Tomcat

Mein grundlegender Workflow befindet sich im Terminal mvn clean install in meinem Basisverzeichnis. Dadurch wird ein Zielverzeichnis mit einer WAR-Datei erstellt. Ich kopiere diese Kriegsdatei in das webapps-Verzeichnis meines Tomcat. 

Wenn ich Änderungen vornehme, muss ich natürlich den Vorgang wiederholen, der langweilig ist. Ich verwende Intellij Ultimate 13.1.6 und ich weiß, dass es möglich ist, all dies durch die IDE erledigen zu lassen, die auf diesem Leitfaden basiert. 

Bevor ich anfange, starte ich mvn clean auf meiner Basis, wodurch das Zielverzeichnis entfernt wird. 

Nun fange ich an wenn ich in die Projektstruktur -> Artefakte einstehe und eine neue Web Application erstellt: Archiv. Ich habe es Projektname genannt und es hatte standardmäßig ein anderes Ausgabeverzeichnis (baseDir/out/artifacts/project_name vs baseDir/target). Ich habe alles standardmäßig verlassen und auf OK geklickt. 

Nun gehe ich zu "Ausführen" -> "Konfigurationen bearbeiten" und erstelle einen neuen lokalen Tomcat-Server mit den folgenden Einstellungen  enter image description here

und im Deployment-Tab füge ich das Artefakt hinzu, das in meinem Before-Start eingebaut ist, wie in meinem Bild zu sehen. Ziemlich einfach.

Immer wenn ich den Server über Intellij laufen lasse, wird er erfolgreich gestartet, es wird jedoch nichts bereitgestellt. Ich bekomme den Fehler:

Artifact project_name: com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: /Users/path/to/workspace/project_name/out/artifacts/project_name/project_name.war not found for the web module.

Und ich überprüfe mein Verzeichnis und wie im Fehler gesehen, wird nichts erstellt. Nicht einmal das Out-Verzeichnis. 

Was mache ich falsch? Ich weiß, dass eine Problemumgehung darin besteht, zum Terminal zurückzukehren, mvn clean install auszuführen und die erstellte .war-Datei in die Bereitstellungskonfiguration zu übernehmen. Ich hatte das Gefühl, dass das eher ein Hack war, da ich es immer noch über die Befehlszeile mache. Wenn ich es noch nicht erstellt habe, kann ich das Ziel nicht als Verzeichnis festlegen, um die Kriegsdatei zu finden. 

Jede Hilfe wird geschätzt.

22
Joey

Checkliste der Dinge, die Sie tun können, um zu überprüfen, wo etwas schief geht:

1) Manuelles Erstellen der Artefakte mithilfe von Erstellen> Artefakte erstellen.

2) Überprüfen Sie, ob sich das Artefakt im erwarteten Ausgabeverzeichnis befindet (out/artifacts/xxx).

3) Falls nicht, gehen Sie zu Datei> Projektstruktur> Artefakte

4) Wählen Sie die betreffende Artefaktdatei aus (in diesem Fall Projektname).

5) Überprüfen Sie, ob das Ausgabeverzeichnis korrekt ist. Versuchen Sie optional, dieses Verzeichnis selbst zu erstellen, falls IntelliJ es nicht tut (obwohl dies mich überraschen würde).

6) Überprüfen Sie, ob der Inhalt korrekt ist.

7) Aktivieren Sie optional "Build on make", um immer die neueste Version Ihres Codes bereitzustellen, wenn Sie den Server ausführen.

Beachten Sie, dass Sie zum Bereitstellen von WAR-Dateien auf einem Tomcat die explodierte WAR vorziehen sollten. Dadurch wird das Bereitstellen/Testen/Debuggen erheblich schneller.

25
xaviert

Ich habe diese Fehlermeldung erhalten, als ich versucht habe, eine App mithilfe von Ausführen zu starten. Das Problem war, dass die WAR-Datei aus irgendeinem Grund nicht bereitgestellt wurde, obwohl Build-> Build Artifacts ausgewählt wurde. Lösung: Ich habe Idea geschlossen und dann das Projekt erneut importiert und als Artefakt Kriegsexplosion ausgewählt. Diesmal hat die Bereitstellung funktioniert.

8
vovahost

Ich habe dieses Problem, der Grund liegt in der Projektstruktur. Das Ausgabeverzeichnis von Artifacts ist nicht wirklich vorhanden:

 enter image description here


Lösungen:

  1. Gehe zu Projektstruktur:

File -> Project Structure

  1. Klicken Sie dann auf die Verzeichnisschaltfläche

 enter image description here

  1. Sie erstellen das Verzeichnis nacheinander anhand des Ausgabeverzeichnisses:

 enter image description here

  1. Starten Sie dann Ihr Projekt erneut.
3
aircraft

Ich hatte das gleiche Problem und keine der oben genannten Lösungen löste das Problem. Teilen Sie es hier, falls jemand anderes auf dasselbe Problem stößt. 

Der Tomcat-Server wurde in meinem Fall so konfiguriert, dass er den JMX-Port auf 18099 statt auf 1099 ausführt. Daher wurde das Artefakt nie implementiert, da der in der IntelliJ Tomcat-Konfiguration standardmäßig verwendete JMX-Port 1099 ist.

Durch das Ändern auf 18099 oder das Entfernen dieser bestimmten Tomcat-Konfiguration wurde das Problem behoben.

Fazit: Wenn Ihr Artefakt bereitgestellt werden soll, stellen Sie sicher, dass der in IntelliJ konfigurierte JMX-Port mit dem JMX-Port übereinstimmt, der tatsächlich von Ihrem Tomcat-Server verwendet wird.

1
isaac.hazan

Ich habe die oben genannten Lösungen ausprobiert, aber die WAR-Datei funktionierte nicht, als ich sie auf dem Tomcat-Server bereitstellte. Geben Sie statt der obigen Lösungen einfach mvn clean und dann mvn install im Terminalfenster ein. Ihre WAR-Datei befindet sich jetzt in 

ProjectName/target/
0
Niamat Zawad

Überprüfen Sie den Ausgabeverzeichnispfad. Beachten Sie, dass die Verwendung von ~ im Pfad nicht funktioniert.

0
Rammgarot