我正在尝试通过ant在Raspberry Pi上运行我的maven程序。完全公开,我基本上没有使用Raspberry,Linux和Ant的经验。我正在关注此guide,并且代码是从那里开始的。
build.xml的代码
<?xml version="1.0" encoding="UTF-8"?>
<project name="Der_HFBot" default="remote-run" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- Setup RASPBERRY PI properties -->
<property name="raspberrypi" value="cencored" />
<property name="raspberryfolder" value="~" />
<property name="username" value="cencored" />
<property name="password" value="cencored" />
<!-- <path id="maven-ant-tasks.classpath" path="${ant.libs.dir}/maven-ant-tasks-2.1.3.jar" /> -->
<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" />
<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>
该项目成功构建,但是在传输时失败,并显示以下消息:
transfer:
[echo] ">>> Found application "
[echo] ">>> Copying application to censored_IP:~/Der_HFBot"
[scp] Connecting to censored_IP:22
BUILD FAILED
C:\Users\Paddy\Desktop\Google Drive\Telegram Bots\Der_HFBot\build.xml:47: java.nio.file.AccessDeniedException: C:\Users\Paddy\Desktop\Google Drive\Telegram Bots\Der_HFBot
Total time: 3 seconds
我尝试以管理员身份运行Eclipse并将项目移至云端硬盘之外的文件夹。
编辑:$ {jar.path}似乎没有返回路径?它应该回显“ Found application $ {jar.path}”,但在控制台中它会返回“ Found application”。它确实尝试访问./target目录。
AccessDeniedException
通常来自缺乏文件许可权。在程序本身和所有其他适用的文件上都使用chmod 777 filename
,这将使所有内容都可以在这些文件上读取/写入/执行,因此请确保您具有安全的开发环境。