[英]How to debug java in maven plug with angular 2, tomee in docker
我有一個帶有2個maven插件的項目。
在docker容器中,tomee和mysql運行。 我想用前端調試Java,這意味着通過點擊http://localhost:8080/mywebapp
,系統應在我在后端(java文件)中設置的斷點處停止。 我正在使用IntelliJ。
有人知道怎么做嗎?
根據Gauraj的建議,我修改了3個文件:1. docker-compose.yml:
version: '2.0'
services:
db:
build: 04.MySQL/
tomee:
build: .
depends_on:
- db
command: >
/bin/bash -c "
while ! nc -z db 3306;
do
echo sleeping;
sleep 5;
done;
echo Connected!;
catalina.sh run;
"
links:
- db:db
ports:
- "8080:8080"
- "8000:8000"
ssl:
build: 05.ProxySSL/
links:
- tomee
ports:
- "443:443"
- "80:80"
2. Dockerfile:
FROM java:8-jdk
MAINTAINER "Software Engineering, RWTH Aachen University"
ENV PATH /usr/local/tomee/bin:$PATH
RUN mkdir -p /usr/local/tomee
WORKDIR /usr/local/tomee
# curl -fsSL 'https://www.apache.org/dist/tomee/KEYS' | awk -F ' = ' '$1 ~ /^ +Key fingerprint$/ { gsub(" ", "", $2); print $2 }' | sort -u
ENV GPG_KEYS \
BDD0BBEB753192957EFC5F896A62FC8EF17D8FEF \
223D3A74B068ECA354DC385CE126833F9CF64915 \
7A2744A8A9AAF063C23EB7868EBE7DBE8D050EEF \
82D8419BA697F0E7FB85916EE91287822FDB81B1 \
9056B710F1E332780DE7AF34CBAEBE39A46C4CA1 \
A57DAF81C1B69921F4BA8723A8DE0A4DB863A7C1 \
B7574789F5018690043E6DD9C212662E12F3E1DD \
B8B301E6105DF628076BD92C5483E55897ABD9B9 \
DBCCD103B8B24F86FFAAB025C8BB472CD297D428 \
F067B8140F5DD80E1D3B5D92318242FE9A0B1183 \
FAA603D58B1BA4EDF65896D0ED340E0E6D545F97
RUN set -xe \
&& for key in $GPG_KEYS; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
RUN set -x \
&& curl -fSL https://dist.apache.org/repos/dist/release/tomee/tomee-1.7.4/apache-tomee-1.7.4-plus.tar.gz.asc -o tomee.tar.gz.asc \
&& curl -fSL http://apache.rediris.es/tomee/tomee-1.7.4/apache-tomee-1.7.4-plus.tar.gz -o tomee.tar.gz \
&& gpg --batch --verify tomee.tar.gz.asc tomee.tar.gz \
&& tar -zxf tomee.tar.gz \
&& mv apache-tomee-plus-1.7.4/* /usr/local/tomee \
&& rm -Rf apache-tomee-plus-1.7.4 \
&& rm bin/*.bat \
&& rm tomee.tar.gz*
RUN apt update && apt install -y netcat-openbsd
RUN mkdir -p /usr/local/tomee/webapps
COPY 03.dockerconfig/tomcat-users.xml /usr/local/tomee/conf/
COPY 01.Backend/lib/ /usr/local/tomee/lib/
COPY 01.Backend/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar /usr/local/tomee/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar
COPY 01.Backend/target/macoco-be.war /usr/local/tomee/webapps/macoco-be.war
COPY 02.Frontend/MaCoCoLive/target/MaCoCoLive.war /usr/local/tomee/webapps/MaCoCoLive.war
COPY 01.Backend/target/apache-tomee/bin/catalina.sh /usr/local/tomee/bin/catalina.sh
EXPOSE 8080 4200 8000
CMD ["catalina.sh", "jpda run"]
catalina.sh文件:
JPDA_SUSPEND =“ y”
JDPA_OPTS -agentlib:jdwp = transport = dt_socket,地址= 8000,服務器= y,掛起= $ JPDA_SUSPEND
然后在運行“ docker-compose build”和“ docker-compose up”。 但是,當我調試它時,IntelliJ會顯示錯誤:“無法打開調試器端口(localhost:8000):java.io.IOException“握手失敗-連接已永久關閉。
剛才我已經弄清楚了如何在Netbeans中制作它!
我認為不可能在IntelliJ中的Docker內部進行遠程調試TomEE,因為IntelliJ嘗試訪問Docker不允許的Docker映像中的catalina.sh。 但是在Netbeans中,該服務器與IDE集成在一起,因此不需要訪問catalina.sh。
我的操作有些棘手:首先運行“ mvn clean install docker:stop docker:start -DskipTests tomee:run”,然后啟動Docker內部的Tomee服務器。 然后將此TomEE服務器添加到Netbeans(每次重新運行mvn命令之后,我都需要再次添加此服務器)。
然后只需創建斷點並調試maven項目即可。
之后,端口8080被Netbeans占用,因此我無法訪問localhost:8080。 但是我可以運行“ npm start”以在Port4200中啟動前端,然后通過前端中的每個操作,它將在后端的斷點處停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.