1. 程式人生 > >社群版的IntelliJ IDEA上配置Tomcat的Debug環境

社群版的IntelliJ IDEA上配置Tomcat的Debug環境

故事背景

公司的開發環境在遠端ucs2機器上,用的開發工具是社群版的idea,沒有tomcat等企業級高階功能,況且不能上外網(有自己的私服倉庫),而我又不想每次都用遠端debug測試、排除問題,我記得上家公司是內嵌到專案中的jetty容器,這裡不適用,所有我選擇了Tomcat的Maven外掛來彌補這個“不習慣”。只需要做以下幾步:

第一步:修改pom.xml

  • <plugins>內新增:

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId
    >
    tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>18888</port> <path>/</path> <contextFile>src/main/webapp/META-INF/context.xml</contextFile> </configuration> </plugin>

    port

    : 可以配置任意未佔用的埠,我配置為18888,;
    contextFile: 指定tomcat的配置的上下文資訊,我的專案是src/main/webapp/META-INF/context.xml

  • 因為我們的專案中引入了javax.servlet-api,我在測試過程中發現這個會導致啟動報錯,故我這裡將scope設定成provided,以避之。

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version
    >
    3.0.1</version> <scope>provided</scope> </dependency>

第二步:修改context.xml

tomcat-email-context-outter.jpg

第三步:修改log4j.xml(無該需求,請略過)

如果你想要在除錯的時候將日誌列印在IDEA控制檯上,請確保<root>中有ConsoleAppender的引用,本檔案已經配置好ConsoleAppender,被命名為Appender1,故可以直接引用如下:

<root>
    <priority value="INFO"/>
    <appender-ref ref="Appender2"/>
    <appender-ref ref="Appender1"/>
</root>

第四步:配置服務啟動

  • 點選進入此路徑:RUN->Edit Configurations...
    這裡寫圖片描述

  • 然後點選左上角+,選擇Maven,

    這裡寫圖片描述

  • 填寫配置,請按照途中圈出的4處進行填寫。

    這裡寫圖片描述

    Command line: tomcat7:run

  • Runner(去掉User Project settings的勾)

    這裡寫圖片描述

    • VM Options: 設定必要的啟動引數
    • 如果需要跳過test,可以直接勾選Skip tests

第五步:執行啟動命令

選擇上一步配置的maven外掛,點選Debug按鈕,最後列印如下,即成功

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tomcat7 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ tomcat7 <<<
[INFO] 
[INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ tomcat7 ---
[INFO] Running war on http://localhost:18888/
[INFO] Using existing Tomcat server configuration at /**/**/**/**/test-tomcatService/target/tomcat
[INFO] create webapp with contextPath: 
Jul 10, 2018 6:14:55 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-18888"]
Jul 10, 2018 6:14:55 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Jul 10, 2018 6:14:55 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47

第六步: 測試

這裡利用在EmailController上打上斷點,利用Postman進行api呼叫。結果如下圖
這裡寫圖片描述
這裡寫圖片描述

Test Request Data:

{
    "request":{
        "requestId":"957452",
        "resourceId":"980767686",
        "requesterName":"zhangsan",
        "requestedFor":"lisi"
    },
    "eventType":"Failure"
}

提醒:

執行啟動命令時,可能會有下載外掛的過程,如果settings.xml中沒有配置repository可能下載不了。我的settings.xml配置如下,僅供參考(因為是公司私服,所以不能示外人,自己替換下即可):

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"
          xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <proxies>
        <proxy>
            <active>true</active>
            <protocol>http</protocol>
            <host>*********</host>
            <port>80</port>
            <nonProxyHosts>*.xx.com|localhost</nonProxyHosts>
        </proxy>
    </proxies>

    <!-- 下面的所有配置都是為了idea配置tomcat外掛而新增的 -->
    <profiles>
        <profile>
            <id>artifactory</id>
            <pluginRepositories>
                <pluginRepository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>xx-release</id>
                    <name>plugins-release</name>
                    <url>http://repo-xx.xx.com/xx/plugins-release</url>
                </pluginRepository>
                <pluginRepository>
                    <snapshots />
                    <id>xx-snapshots</id>
                    <name>plugins-snapshot</name>
                    <url>http://repo-xx.xx.com/xx/plugins-snapshot</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>artifactory</activeProfile>
    </activeProfiles>
</settings>