Score:1

การดีบักระยะไกลของโครงการ java maven บน Raspberry Pi โดยใช้ Eclipse IDE: ข้อผิดพลาด Handshake

ธง cn

ฉันกำลังพยายามกำหนดค่า Eclipse IDE (2021-09 (4.21.0)) บน Ubuntu 20.04 เพื่อดีบักแอปพลิเคชันจาวาระยะไกลบน RaspberryPi ฉันทำตาม 'tutortials' หลายครั้ง (ลิงค์1, ลิงค์2). ด้วยการผสมผสานระหว่างทั้งสองอย่างและการค้นหาข้อความแสดงข้อผิดพลาดอย่างเข้มข้นบนเว็บ ฉันสามารถสร้าง pom.xml และ build.xml ขึ้นมาใหม่ได้

pom.xml

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org

/2001/XMLSchema-instance"
  xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>pi</groupId>
  <artifactId>hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hello</name>
  <url>http://maven.apache.org</url>

<build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
               <archive>
                  <manifest>
                     <mainClass>pi.hello.App</mainClass>
                  </manifest>
               </archive>
            </configuration>
         </plugin>
      </plugins>
   </build>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="remote-run" basedir="."
    xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <!-- Setup RASPBERRY PI properties -->
    <property name="raspberrypi" value="192.168.4.2" />
    <property name="raspberryfolder" value="~" />
    <property name="username" value="pi" />
    <property name="password" value="raspberry" />

    <!--
    <path id="maven-ant-tasks.classpath" path="${ant.libs.dir}/maven-ant-tasks-2.1.3.jar" />
    <typedef 
        resource="org/apache/maven/artifact/ant/antlib.xml"
        uri="antlib:org.apache.maven.artifact.ant"
        classpathref="maven-ant-tasks.classpath" />

        
    <path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar" />
    <typedef 
        resource="org/apache/maven/artifact/ant/antlib.xml" 
        uri="antlib:org.apache.maven.artifact.ant" 
        classpathref="maven-ant-tasks.classpath" />
    -->

    <!-- Add maven install target to be run before deploy -->
        
    <target name="maven-install"> 
        <artifact:mvn pom="pom.xml"> 
            <arg value="install"/> 
        </artifact:mvn> 
    </target> 

    <!-- Locate the prokect jar and transfer via scp to RASPBERRY PI -->
    <target name="transfer" depends="maven-install">
        <first id="jars">
            <!--
            <fileset dir="target" includes="**/*-SNAPSHOT-jar-with-dependencies.jar" />
            -->
            <fileset dir="target" includes="**/*.jar" />
        </first>
        <pathconvert pathsep="," property="jar.path" refid="jars" />
        <basename file="${jar.path}" property="jar.filename" />
        <echo>">>> Found application ${jar.path}"</echo>

        <echo>">>> Copying application to ${raspberrypi}:${raspberryfolder}/${jar.filename}"</echo>
        <scp 
            localfile="${jar.path}" 
            todir="${username}:${password}@${raspberrypi}:${raspberryfolder}" 
            trust="true" />

    </target>
        
    <!-- Run java -->
    <target name="remote-run" depends="transfer">   
        <echo>">>> Starting ${raspberrypi}:${raspberryfolder}/${jar.filename}"</echo>

        <sshexec 
            host="${raspberrypi}" 
            username="${username}" 
            password="${password}" 
            trust="true" 
            failonerror="true" 
            usepty="true" 
            command="java -jar ${jar.filename}" />
    </target>
    
    <!-- Run java in debug mode and keep waiting for execution -->
    <target name="remote-debug" depends="transfer"> 
        <echo>">>> Starting ${raspberrypi}:${raspberryfolder}/${jar.filename} in debug mode"</echo>
        <sshexec 
            host="${raspberrypi}" 
            username="${username}" 
            password="${password}" 
            trust="true" 
            failonerror="true" 
            usepty="true" 
            command="java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=y -jar ${jar.filename}" />
    </target>
</project>

เอาต์พุตเมื่อ build.xml ถูกคอมไพล์โดยใช้

เรียกใช้เป็น -> Ant build

ส่งผลให้

ติดตั้ง maven:
[artifact:mvn] [INFO] กำลังสแกนหาโปรเจ็กต์...
[สิ่งประดิษฐ์:mvn] [INFO] ------------------------------------------ ------------------------------
[artifact:mvn] [INFO] สวัสดี
[artifact:mvn] [INFO] ส่วนงาน: [ติดตั้ง]
[สิ่งประดิษฐ์:mvn] [INFO] ------------------------------------------ ------------------------------
[สิ่งประดิษฐ์:mvn] [INFO] [ทรัพยากร:ทรัพยากร]
[artifact:mvn] [INFO] ใช้การเข้ารหัส 'UTF-8' เพื่อคัดลอกทรัพยากรที่ถูกกรอง
[artifact:mvn] [INFO] ข้ามไดเรกทอรีทรัพยากรที่ไม่มีอยู่ /media/stefan/DATA/Electronics/java/hello/src/main/resources
[สิ่งประดิษฐ์:mvn] [INFO] [คอมไพเลอร์:คอมไพล์]
[artifact:mvn] [INFO] ไม่มีอะไรให้คอมไพล์ - คลาสทั้งหมดเป็นปัจจุบัน
[สิ่งประดิษฐ์:mvn] [INFO] [ทรัพยากร:testResources]
[artifact:mvn] [INFO] ใช้การเข้ารหัส 'UTF-8' เพื่อคัดลอกทรัพยากรที่ถูกกรอง
[artifact:mvn] [INFO] ข้ามไดเรกทอรีทรัพยากรที่ไม่มีอยู่ /media/stefan/DATA/Electronics/java/hello/src/test/resources
[สิ่งประดิษฐ์:mvn] [INFO] [คอมไพเลอร์:testCompile]
[artifact:mvn] [INFO] ไม่มีอะไรให้คอมไพล์ - คลาสทั้งหมดเป็นปัจจุบัน
[สิ่งประดิษฐ์:mvn] [ข้อมูล] [surefire:ทดสอบ]
[artifact:mvn] [INFO] ไดเร็กทอรีรายงาน Surefire: /media/stefan/DATA/Electronics/java/hello/target/surefire-reports
[สิ่งประดิษฐ์:mvn] --------------------------------------------- ----------
[สิ่งประดิษฐ์:mvn] T E S T S
[สิ่งประดิษฐ์:mvn] --------------------------------------------- ----------
[artifact:mvn] กำลังรัน pi.hello.AppTest
[artifact:mvn] เรียกใช้การทดสอบ: 1, ล้มเหลว: 0, ข้อผิดพลาด: 0, ข้าม: 0, เวลาที่ผ่านไป: 0.021 วินาที
[สิ่งประดิษฐ์:mvn] ผลลัพธ์:
[artifact:mvn] รันการทดสอบ: 1, ล้มเหลว: 0, ข้อผิดพลาด: 0, ข้าม: 0
[สิ่งประดิษฐ์:mvn] [INFO] [ขวดโหล:ขวดโหล]
[สิ่งประดิษฐ์:mvn] [INFO] [ติดตั้ง:ติดตั้ง]
[artifact:mvn] [INFO] กำลังติดตั้ง /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar ไปยัง /home/stefan/.m2/repository/pi/hello/0.0 1-SNAPSHOT/hello-0.0.1-SNAPSHOT.jar
[สิ่งประดิษฐ์:mvn] [INFO] ------------------------------------------ ------------------------------
[artifact:mvn] [INFO] สร้างสำเร็จ
[สิ่งประดิษฐ์:mvn] [INFO] ------------------------------------------ ------------------------------
[artifact:mvn] [INFO] เวลาทั้งหมด: 1 วินาที
[artifact:mvn] [INFO] เสร็จสิ้นเมื่อ: อ. 30 พ.ย. 17:12:36 CET 2021
[artifact:mvn] [INFO] หน่วยความจำสุดท้าย: 18M/70M
[สิ่งประดิษฐ์:mvn] [INFO] ------------------------------------------ ------------------------------
โอนย้าย:
     [echo] ">>> พบแอปพลิเคชัน /media/stefan/DATA/Electronics/java/hello/target/hello-0.0.1-SNAPSHOT.jar"
     [echo] ">>> กำลังคัดลอกแอปพลิเคชันไปที่ 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar"
      [scp] กำลังเชื่อมต่อกับ 192.168.4.2:22
      [scp] เสร็จแล้ว
วิ่งระยะไกล:
     [echo] ">>> เริ่มต้น 192.168.4.2:~/hello-0.0.1-SNAPSHOT.jar"
  [sshexec] กำลังเชื่อมต่อกับ 192.168.4.2:22
  [sshexec] cmd : java -jar สวัสดี-0.0.1-SNAPSHOT.jar
  [sshexec] สวัสดีชาวโลก!
  [sshexec] 
สร้างสำเร็จ
เวลาทั้งหมด: 6 วินาที

การรวมกันของปลั๊กอินหรือสิ่งประดิษฐ์อื่น ๆ สำหรับ build.xml เริ่มต้นของโครงการ maven (สร้างผ่านวิซาร์ด) ทำให้เกิดข้อผิดพลาดเนื่องจากเวอร์ชันที่ไม่ถูกต้องในบางปลั๊กอิน (แม้ว่าจะติดตั้งเวอร์ชันที่ถูกต้องแล้วก็ตาม)

เกิดข้อผิดพลาดในการแก้ไขเวอร์ชันสำหรับ 'org.apache.maven.plugins:maven-resources-plugin': ปลั๊กอินต้องใช้ Maven เวอร์ชัน 3.0

รุ่นปัจจุบัน

mvn - เวอร์ชัน
อาปาเช่ มาเวน 3.6.3
หน้าแรกของ Maven: /usr/share/maven
เวอร์ชัน Java: 11.0.11 ผู้จำหน่าย: Ubuntu รันไทม์: /usr/lib/jvm/java-11-openjdk-amd64
ตำแหน่งที่ตั้งเริ่มต้น: en_US การเข้ารหัสแพลตฟอร์ม: UTF-8
ชื่อระบบปฏิบัติการ: "linux", เวอร์ชัน: "5.11.0-40-generic", arch: "amd64", family: "unix"

ในการเริ่มทำงาน ฉันไม่ต้องการเปลี่ยน build.xml ปัจจุบันของฉัน

สำหรับขั้นตอนสุดท้ายในการกำหนดค่า ฉันต้องทำให้รีโมตลอนเชอร์ทำงาน หน้าต่างการกำหนดค่าจะมีลักษณะดังนี้ debug_config

การทดสอบการเชื่อมต่อส่งผลให้

error_vm

เนื่องจากกระบวนการสร้างสามารถเชื่อมต่อผ่าน ssh ได้ ให้วางและเรียกใช้ jar ฉันไม่รู้ว่าทำไมไม่สามารถสร้างการเชื่อมต่อได้ พารามิเตอร์สำหรับการเชื่อมต่อถูกเก็บไว้ใน pom.xml ฉันไม่แน่ใจว่ารายการในการกำหนดค่าการดีบักทำอะไร สามารถสร้างเทอร์มินัลบน RPi ได้โดยใช้คำสั่งบรรทัดคำสั่งสำหรับการเชื่อมต่อ ssh (ssh pi@) ไม่ควรมีปัญหาการเข้าถึงความปลอดภัย

  1. เหตุใดการกำหนดค่าระยะไกลจึงต้องการที่อยู่ พอร์ต เมื่อการเชื่อมต่อถูกกำหนดไว้แล้วใน pom.xml
  2. build.xml ถูกเรียกโดยใช้ 'Debug_As->RPi_Remote' (การกำหนดค่าการดีบักที่สร้างขึ้น) หรือไม่
  3. ฉันจะเรียก build.xml และเปิดใช้งานจุดพักได้อย่างไร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา