Я пытаюсь настроить Eclipse IDE (2021-09 (4.21.0)) на Ubuntu 20.04 для удаленной отладки Java-приложений на RaspberryPi. Я следовал нескольким «учебникам» (ссылка1, ссылка2). Благодаря сочетанию обоих и интенсивного поиска сообщений об ошибках в Интернете я смог воссоздать pom.xml и build.xml.
пом.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
приводит к
maven-установить:
[artifact:mvn] [INFO] Сканирование проектов...
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] Здравствуй, строй
[артефакт: mvn] [INFO] задача-сегмент: [установить]
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[артефакт: mvn] [ИНФОРМАЦИЯ] [ресурсы: ресурсы]
[artifact:mvn] [INFO] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов.
[артефакт: mvn] [INFO] пропустить несуществующий каталог ресурсов /media/stefan/DATA/Electronics/java/hello/src/main/resources
[артефакт: mvn] [ИНФОРМАЦИЯ] [компилятор: компиляция]
[artifact:mvn] [INFO] Нечего компилировать — все классы обновлены
[артефакт: mvn] [ИНФОРМАЦИЯ] [ресурсы: testResources]
[artifact:mvn] [INFO] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов.
[артефакт: mvn] [INFO] пропустить несуществующий каталог ресурсов /media/stefan/DATA/Electronics/java/hello/src/test/resources
[артефакт: mvn] [ИНФОРМАЦИЯ] [компилятор: testCompile]
[artifact:mvn] [INFO] Нечего компилировать — все классы обновлены
[артефакт: mvn] [ИНФОРМАЦИЯ] [верный огонь: тест]
[артефакт: mvn] [INFO] Каталог отчетов Surefire: /media/stefan/DATA/Electronics/java/hello/target/surefire-reports
[артефакт: mvn] --------------------------------------------- ----------
[артефакт: mvn] Т Е С Т С
[артефакт: mvn] --------------------------------------------- ----------
[артефакт: mvn] Запуск pi.hello.AppTest
[artifact:mvn] Запуск тестов: 1, сбоев: 0, ошибок: 0, пропущено: 0, истекшее время: 0,021 сек.
[артефакт: mvn] Результаты:
[artifact:mvn] Запущено тестов: 1, сбоев: 0, ошибок: 0, пропущено: 0
[артефакт: mvn] [ИНФОРМАЦИЯ] [банка: банка]
[артефакт: mvn] [ИНФОРМАЦИЯ] [установить: установить]
[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] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] УСПЕШНАЯ СБОРКА
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
[artifact:mvn] [INFO] Общее время: 1 секунда
[artifact:mvn] [INFO] Завершено: вторник, 30 ноября, 17:12:36 CET 2021 г.
[артефакт: mvn] [ИНФОРМАЦИЯ] Окончательная память: 18M/70M
[артефакт: mvn] [ИНФОРМАЦИЯ] --------------------------------------------- ------------------------------
перевод:
[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», архитектура: «amd64», семейство: «unix»
Чтобы начать работать, я бы предпочел не менять свой текущий build.xml.
Для последнего шага в настройке мне нужно, чтобы удаленный лаунчер работал. Следуя инструкциям, окно конфигурации выглядит так:
Тестирование соединения приводит к
Так как в процессе сборки удалось подключиться по ssh, поставить и запустить банку не знаю почему не может установиться соединение. Параметр для соединения хранится в pom.xml. Я не уверен, что делают записи в конфигурации отладки. Терминал на RPi можно установить с помощью команд командной строки для ssh-соединения (ssh pi@). Не должно быть проблем с безопасным доступом.
- Зачем удаленной конфигурации нужен адрес, порт, когда соединение уже определено в pom.xml?
- Вызывается ли даже build.xml с использованием «Debug_As->RPi_Remote» (созданная конфигурация отладки)?
- Как я могу вызвать build.xml и включить использование точек останова?