Integrating NetBeans for Raspberry Pi Java Development
Posted
by speakjava
on Oracle Blogs
See other posts from Oracle Blogs
or by speakjava
Published on Fri, 25 Oct 2013 15:34:01 +0000
Indexed on
2013/10/25
22:03 UTC
Read the original article
Hit count: 556
/IoT
I will assume that your starting point is a Raspberry Pi with an SD card that has one of the latest Raspbian images on it. This is good because this now includes the JDK 7 as part of the distro, so no need to download and install a separate JDK. I will also assume that you have installed the JDK and NetBeans on your PC. These can be downloaded here.
There are numerous approaches you can take to this including mounting the file system from the Raspberry Pi remotely on your development machine. I tried this and I found that NetBeans got rather upset if the file system disappeared either through network interruption or the Raspberry Pi being turned off. The following method uses copying over SSH, which will fail more gracefully if the Pi is not responding.
Step 1: Enable SSH on the Raspberry Pi
To run the Java applications you create you will need to start Java on the Raspberry Pi with the appropriate class name, classpath and parameters. For non-JavaFX applications you can either do this from the Raspberry Pi desktop or, if you do not have a monitor connected through a remote command line. To execute the remote command line you need to enable SSH (a secure shell login over the network) and connect using an application like PuTTY.You can enable SSH when you first boot the Raspberry Pi, as the raspi-config program runs automatically. You can also run it at any time afterwards by running the command:
sudo raspi-config
This will bring up a menu of options. Select '8 Advanced Options' and on the next screen select 'A$ SSH'. Select 'Enable' and the task is complete.
Step 2: Configure Raspberry Pi Networking
By default, the Raspbian distribution configures the ethernet connection to use DHCP rather than a static IP address. You can continue to use DHCP if you want, but to avoid having to potentially change settings whenever you reboot the Pi using a static IP address is simpler.To configure this on the Pi you need to edit the /etc/network/interfaces file. You will need to do this as root using the sudo command, so something like sudo vi /etc/network/interfaces. In this file you will see this line:
iface eth0 inet dhcp
This needs to be changed to the following:
iface eth0 inet static
address 10.0.0.2
gateway 10.0.0.254
netmask 255.255.255.0
You will need to change the values in red to an appropriate IP address and to match the address of your gateway.
Step 3: Create a Public-Private Key Pair On Your Development Machine
How you do this will depend on which Operating system you are using:Mac OSX or Linux
Run the command:ssh-keygen -t rsa
Press ENTER/RETURN to accept the default destination for saving the key. We do not need a passphrase so simply press ENTER/RETURN for an empty one and once more to confirm.
The key will be created in the file .ssh/id_rsa.pub in your home directory. Display the contents of this file using the cat command:
cat ~/.ssh/id_rsa.pub
Open a window, SSH to the Raspberry Pi and login. Change directory to .ssh and edit the authorized_keys file (don't worry if the file does not exist). Copy and paste the contents of the id_rsa.pub file to the authorized_keys file and save it.
Windows
Since Windows is not a UNIX derivative operating system it does not include the necessary key generating software by default. To generate the key I used puttygen.exe which is available from the same site that provides the PuTTY application, here.Download this and run it on your Windows machine. Follow the instructions to generate a key. I remove the key comment, but you can leave that if you want.
Click "Save private key", confirm that you don't want to use a passphrase and select a filename and location for the key.
Copy the public key from the part of the window marked, "Public key for pasting into OpenSSH authorized_keys file". Use PuTTY to connect to the Raspberry Pi and login. Change directory to .ssh and edit the authorized_keys file (don't worry if this does not exist). Paste the key information at the end of this file and save it.
Logout and then start PuTTY again. This time we need to create a saved session using the private key. Type in the IP address of the Raspberry Pi in the "Hostname (or IP address)" field and expand "SSH" under the "Connection" category. Select "Auth" (see the screen shot below).
Click the "Browse" button under "Private key file for authentication" and select the file you saved from puttygen.
Go back to the "Session" category and enter a short name in the saved sessions field, as shown below. Click "Save" to save the session.
Step 4: Test The Configuration
You should now have the ability to use scp
(Mac/Linux) or pscp.exe
(Windows) to copy files from your development machine to the Raspberry
Pi without needing to authenticate by typing in a password (so we can
automate the process in NetBeans). It's a good idea to test this
using something like:scp /tmp/foo [email protected]:/tmp
on Linux or Mac or
pscp.exe foo pi@raspi:/tmp
on Windows (Note that we use the saved configuration name instead of the IP address or hostname so the public key is picked up). pscp.exe is another tool available from the creators of PuTTY.
Step 5: Configure the NetBeans Build Script
Start NetBeans and create a new project (or open an existing one that you want to deploy automatically to the Raspberry Pi).Select the Files tab in the explorer window and expand your project. You will see a build.xml file. Double click this to edit it.
This file will mostly be comments. At the end (but within the </project> tag) add the XML for <target name="-post-jar">, shown below
Here's the code again in case you want to use cut-and-paste:
<target name="-post-jar">
<echo level="info" message="Copying dist
directory to remote Pi"/>
<exec executable="scp" dir="${basedir}">
<arg line="-r"/>
<arg value="dist"/>
<arg
value="[email protected]:NetBeans/CopyTest"/>
</exec>
</target>
For Windows it will be slightly different:
<target name="-post-jar">
<echo level="info" message="Copying dist
directory to remote Pi"/>
<exec executable="C:\pi\putty\pscp.exe" dir="${basedir}">
<arg line="-r"/>
<arg value="dist"/>
<arg
value="pi@raspi:NetBeans/CopyTest"/>
</exec>
</target>
You will also need to ensure that pscp.exe is in your PATH (or specify a fully qualified pathname).
From now on when you clean and build the project the dist directory will automatically be copied to the Raspberry Pi ready for testing.
© Oracle Blogs or respective owner