Alternativer Port für Tomcat (nicht 8080) beim Starten mit Maven?

77

Gibt es eine einfache Möglichkeit, einen alternativen Port für Tomcat im POM oder in der Befehlszeile anzugeben? Ich möchte, dass mehrere Projekte auf demselben Computer ausgeführt werden.

sammyo
quelle
4
mvn -Dmaven.tomcat <Version> .port = <1024–49151> tomcat <Version>: run Beispiel mvn -Dmaven.tomcat7.port = 8585 tomcat7: run ODER in POM.XML <plugin> ... <configuration> < Port> 8585 </ Port> </ Konfiguration> </ Plugin>
Rafiq

Antworten:

109

Ich weiß, dass dieser Thread alt ist, aber ...

Der Link zur Dokumentation von Greg ist interessant:

port:
The port to run the Tomcat server on.
    Type: int
    Required: No
    Expression: ${maven.tomcat.port}
    Default: 8080

Der Ausdruck wird von Maven verwendet, um den Wert in seinem Code abzurufen. Es kann aus einer Konfigurationsdatei oder über die Befehlszeile stammen.

Du könntest rennen

mvn -Dmaven.tomcat.port=8181 tomcat:run-war
Vincent Demeester
quelle
8
Absolut! mvn -Dmaven.tomcat.port=8181 tomcat:run
lrkwz
1
Wo sollen wir das laufen lassen?
bks4line
Hi @ bks4line Sie können den obigen Befehl bei der Auswahl Ihres Projekts eingeben und zur Option Ausführen als gehen - AS
ausführen
32

Mit der im Tomcat-Maven-Plugin angegebenen Syntax können Sie den Port direkt angeben:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>            
  <configuration>          
    <server>tomcat-development-server</server>
    <port>9966</port>
  </configuration>
</plugin>
Greg
quelle
Kann dies in der settings.xml angegeben werden? Diese Konfiguration würde andere Benutzer davon abhalten, wenn ihr Tomcat auf einem anderen Port ausgeführt würde.
Drew
28

Ich hatte ein ähnliches Problem, als ich mehrere kleine Servlets hatte, die gleichzeitig ihre Integrationstestphase ausführten, was zu einem Problem wurde, da diese für die Verwendung desselben Ports konfiguriert waren. Dank des Build-Helper-Maven-Plugins: Reserve-Network-Port- Ziel ist es jedoch möglich, zufällige Portnummern zu erhalten, die verfügbar sind. Dann kann ich eine URL erstellen, die http: // localhost: [port] / [Servletname] enthält und in die Java- Testklasse eingespeist wird .

Zufälligen Port abrufen :

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
    <execution>
        <id>reserve-network-port</id>
        <goals>
            <goal>reserve-network-port</goal>
        </goals>
        <phase>pre-integration-test</phase>
        <configuration>
            <portNames>
                <portName>tomcat.http.port</portName>
            </portNames>
        </configuration>
    </execution>
</executions>

Tomcat mit dem Port starten

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<configuration>
    <port>${tomcat.http.port}</port>
    <useTestClasspath>true</useTestClasspath>
</configuration>
....
</plugin>

Eingabe der URL in den Java-Integrationstest, der vom ausfallsicheren Plugin ausgeführt wird

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12.3</version>
....
<configuration>
    <systemPropertyVariables>
        <integration-test.url>http://localhost:${tomcat.http.port}/${project.build.finalName}/</integration-test.url>
    </systemPropertyVariables>
</configuration>
</plugin>

Java-Code

public class DownloadAreaIT {
    private static final String URL = System.getProperty("integration-test.url");
}
Redsolo
quelle
9

Unten hat bei mir funktioniert:

        <properties>
            <maven.tomcat.port>9090</maven.tomcat.port>
        </properties>

        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>${maven.tomcat.port}</port>
            </configuration>
        </plugin>
Sai Viswanath VKS Palaparthi
quelle
Wie unterscheidet sich das von den vorhandenen Antworten?
Leigh
$ {maven.tomcat.port} -> Wo soll ich den Wert von maven.tomcat.port platzieren?
göttlicher
4

Sie können die Portkonfiguration dauerhaft hinzufügen, indem Sie den Attributport hinzufügen.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <port>9090</port>
            </configuration>
        </plugin>
    </plugins>
</build>
jiahao
quelle
Tomcat 7, das gleiche Tomcat7-Maven-Plugin
iMysak
3
Ausführen als tomcat7: Ausführen anstelle von
4

Es gibt die beste und einfachste Möglichkeit, Tomcat (nicht 8080) zu ändern, wenn Sie mit Maven beginnen

Bearbeiten Sie einfach Ihre application.properties-Datei (wenn Sie keine application.properties-Datei haben, erstellen Sie eine application.properties-Datei im Ressourcenverzeichnis Ihres Maven-Projekts) und legen Sie die folgende Zeile fest:
server.port = 8181 // Sie können Ihre Portnummer auswählen.

Abdullah Al Hafiz
quelle
2

Wenn Sie das Maven Tomcat-Plugin verwenden, können Sie eine context.xml angeben, indem Sie der pom.xml einen Plugin-Konfigurationsblock hinzufügen:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <version>1.0-beta-1</version>
        <configuration>
          <mode>both</mode>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

Die verwendete Standarddatei context.xml befindet sich unter src/main/webapp/META-INF/context.xml.

Stellen Sie dort verschiedene Ports ein.

Pascal Thivent
quelle
1

Ich denke, das Beste und Einfachste ist Folgendes (wenn Ihr Test ordnungsgemäß an die Integrationsphase gebunden ist):

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>reserve-network-port</id>
            <goals>
                <goal>reserve-network-port</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
                <portNames>      
                    <portName>maven.tomcat.port</portName>
                </portNames>
            </configuration>
        </execution>
    </executions>
</plugin>
MariuszS
quelle
1
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <server>tomcat-development-server</server>
        <port>9090</port>
    </configuration>
</plugin>
Pratik Gaurav
quelle
0

Nachdem ich ungefähr 3 Stunden damit verbracht habe, den Port in POM.xml zu ändern, ist hier meine neueste Lösung.

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
  <maven.tomcat.port>8081</maven.tomcat.port>
  </configuration>
 </plugin>

Die Verwendung von just hat portnicht funktioniert, da dies keine Eigenschaft ist, die Sie festlegen können <configuration>. Wir müssen verstehen, was das Problem verursacht. In meinem Fall war der Fehler, dass der Port belegt 8080ist. Ich habe den Port in geändert server.xml, 8081aber Maven nimmt ihn nicht von dort. Wir müssen es speziell im configurationFeld erzählen . Hier <maven.tomcat.port>8081</maven.tomcat.port>kommt die Rettung. Hinweis: Sie können den Port 8081 auf etwas anderes umstellen, das Ihnen gefällt.

CKM
quelle
0

Ich weiß, dass es eine sehr alte Frage ist, die noch keine Antwort hat.

Und ich habe die ähnliche Frage, wenn ich ein altes Projekt konvertieren muss, das einen äußeren Kater in einen eingebetteten Kater verwendet. Verwenden Sie das Tomcat7-Maven-Plugin.

Und was ich brauche, ist ein ausführbares Glas zu erstellen. Aber bestehende Antwort kann nicht Arbeit für mich ... was auch immer ich laufe java -jar project-name.jarnach mvn package. Es läuft immer auf dem Port, 8080den ich nicht wollte ... Dann suche ich im Dokument Executable War und was ich behoben habe, ist einfach einen Parameter im Befehl hinzuzufügen

java -jar my_project.jar -httpPort 9091

welche in doc:

Verwendung: java -jar [Pfad zu Ihrem Exec War Jar] ...

-httpPort http Port zu verwenden

-httpsPort https Port zu verwenden ...

hoffe es ist nützlich.

Sieben
quelle
Ich denke, es sollte sein java -Dserver.port=8888 -jar target/demo-0.0.1-SNAPSHOT.waroder java -Dserver.port=8888 -jar target/demo-0.0.1-SNAPSHOT.jarwenn Spring Boot verwendet wird ( docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… )
Sasha Bond