Я обычно никогда не публикую вопросы о stackoverflow, потому что я всегда находил ответы, но в этом случае я потратил целую неделю, пытаясь получить затмение для отладки моего удаленного файла WAR, но это невозможно.Мой военный проект - это просто Hello Word с одним файлом BackTest.java
package alxFinancial.dispatcher;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import javax.servlet.*;
import java.io.*;
/**
* Servlet implementation class BackTest
*/
@WebServlet("/BackTest")
public class BackTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BackTest() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException,IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<head><title>Hello World</title></title>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException,IOException
{
doGet(request, response);
}
}
Я создал файл ant build.xml для компиляции файла war.Я обязательно включил источник, переменные и строки и debug = "true" в опцию отладчика.
<project name="orderManager" default="war_dispatcher" basedir=".">
<!-- set global properties for this build -->
<property name="build" location="build"/>
<property name="lib" location="build/lib"/>
<property name="jar_path"
location="/home/alex/Documents/Projects/Finance/Framework/Java/jars"/>
<property name="lib_alxFinancial" location="build/lib/alxFinancial"/>
<property name="lib_dispatcher" location="build/lib/dispatcher"/>
<property name="target" location="build/target"/>
<property name="webxml" location="ressources/dispatcher/webContent/WEB-
INF/web.xml"/>
<property name="web_directory" location="ressources/dispatcher/webContent"/>
<property name="src" location="src"/>
<property name="src_dispatcher" location="src/dispatcher"/>
<property name="src_alxFinancial" location="src/alxFinancial"/>
<property name="main-class" value="orderManager.Test" />
<property name="client-main-class" value="orderManager.Client" />
<property name="server-main-class" value="orderManager.OrderServer" />
<property name="quoteUpdate-main-class" value="quoteUpdate.Test" />
<property name="strategyManager-main-class"
value="strategyManager.StrategyManagerServer" />
<property name="ressources" value="ressources" />
<path id="dispatcher.classpath">
<fileset dir="/home/alex/Documents/Projects/Finance/Framework/Java/jars">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
<mkdir dir="${lib}"/>
<mkdir dir="${lib_alxFinancial}"/>
<mkdir dir="${lib_dispatcher}"/>
<mkdir dir="${target}"/>
</target>
<target name="build_dispatcher" depends="init" description="Compile
dispatcher source">
<javac srcdir="${src_dispatcher}" destdir="${lib_dispatcher}" debug="true"
includeantruntime="false" debuglevel="lines,vars,source" source="1.8"
target="1.8">
<classpath refid="dispatcher.classpath"/>
</javac>
</target>
<target name="war_dispatcher" depends="build_dispatcher">
<war warfile="${target}/Dispatcher.war" webxml="${webxml}">
<classes dir="${lib_dispatcher}" />
<fileset dir="${web_directory}">
<exclude name="WEB-INF/web.xml" />
</fileset>
</war>
</target>
<target name="copy_dispatcher" depends="war_dispatcher" description="Copy
dispatcher war to tomcat webapp directory">
<copy file="${target}/Dispatcher.war" tofile="${tomcat}/Dispatcher.war"
overwrite="true"/>
</target>
</project>
Мой скрипт ant скомпилирует мой класс, создаст файл war и скопирует его в tomcat / webapp/ folder.
Я также настроил свой catalina.sh так, чтобы он мог принимать удаленную отладку следующим образом.
#
JPDA_OPTS="-
agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
#
и, наконец, я настроил удаленное Java-приложение в Eclipse с портом 8000.и хост localhost. Когда я запускаю http://localhost:8080/Dispatcher/BackTest, я вижу, что мое красивое слово Hello появляется, но eclipse не останавливается в точках останова, которые я установил в doGet. Я также попытался использовать jdb в качестве отладчика, думая, что это была проблема затменияно я не вижу код:
alex@XXX:~/alx_git/orderManager$ jdb -attach localhost:8000 -sourcepath
src/dispatcher/
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> stop in alxFinancial.dispatcher.BackTest.doGet
Set breakpoint alxFinancial.dispatcher.BackTest.doGet
>
Breakpoint hit: "thread=http-nio-8080-exec-5",
alxFinancial.dispatcher.BackTest.doGet(), line=23 bci=0
http-nio-8080-exec-5[1] next
>
Step completed: "thread=http-nio-8080-exec-5",
alxFinancial.dispatcher.BackTest.doGet(), line=24 bci=8
http-nio-8080-exec-5[1] next
>
Step completed: "thread=http-nio-8080-exec-5",
alxFinancial.dispatcher.BackTest.doGet(), line=25 bci=15
Я даю вам, ребята, больше информации о версии ant, javac, java, eclipse и tomcat.
ant Apache Ant(TM) version 1.10.3 compiled on March 24 2018
javac javac 1.8.0_131
java java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
eclipse Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500
Server version: Apache Tomcat/8.0.24
Server built: Jul 1 2015 20:19:55 UTC
Server number: 8.0.24.0
OS Name: Linux
OS Version: 4.15.0-34-generic
Architecture: amd64
JVM Version: 1.8.0_131-b11
JVM Vendor: Oracle Corporation
Я действительноизвините за этот вопрос, но я застрял. Я действительно пытался раньше, но я не могу получить затмение для отладки своего кода.
Я сейчас ближе.Если я создаю динамический веб-проект на Java, включу в него свой класс BackTest.java и экспортирую файл войны на мой сервер Tomcat, он работает, я могу остановиться на своей точке останова.Принимая во внимание, что если я использую новый проект Java с существующим файлом сборки ant, я не могу получить eclipse для его отладки.Может быть какая-то недостающая библиотека в файле WAR?Я надеюсь, что вы можете мне помочь.Alex