warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

Ant で、com.sun.tools.javac.Main is not on the classpath. というエラーへの対処

$JAVA_HOME を正しく設定していて、コンパイラが正常に動作しているのも関わらず以下のエラーに遭遇したとき、
build.xml:xxx: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
Linux の場合は、$JAVA_HOME/lib にある tools.jar を、$JAVA_HOME/jre/lib/ext にコピーしてあげればよい (試してはいないが、Windows その他でもこの方法でイケると思う)。
# cp $JAVA_HOME/lib/tools.jar $JAVA_HOME/jre/lib/ext
$JAVA_HOME を正しく設定していて、コンパイラが正常に動作しているのも関わらず以下のエラーに遭遇したとき、
build.xml:xxx: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
Linux の場合は、$JAVA_HOME/lib にある tools.jar を、$JAVA_HOME/jre/lib/ext にコピーしてあげればよい (試してはいないが、Windows その他でもこの方法でイケると思う)。
# cp $JAVA_HOME/lib/tools.jar $JAVA_HOME/jre/lib/ext

Linux に、Ant をインストールする

Ant は Java 版の make だと思ってよい。 以下の URL にアクセスして Apache Ant をゲット。 コンソールから以下のコマンドを実行
# ./build.sh
ビルドが成功すると、dist ディレクトリが作成されていて、その中に bin と lib というディレクトリができている。bin にある ant (シェルスクリプト) と、lib にあるすべての jar ファイルを以下のディレクトリにコピーする。
# cp ./bin/ant /usr/local/bin
# cp ./lib/*.* /usr/java/jdk1.5.0_06/jre/lib/ext
Ant は Java 版の make だと思ってよい。 以下の URL にアクセスして Apache Ant をゲット。 コンソールから以下のコマンドを実行
# ./build.sh
ビルドが成功すると、dist ディレクトリが作成されていて、その中に bin と lib というディレクトリができている。bin にある ant (シェルスクリプト) と、lib にあるすべての jar ファイルを以下のディレクトリにコピーする。
# cp ./bin/ant /usr/local/bin
# cp ./lib/*.* /usr/java/jdk1.5.0_06/jre/lib/ext

Java で、設定ファイルから値を読み込む方法

Java で設定ファイル (Attribute = Value の形式) を用意して、その設定ファイルに書いた属性の値を読み込むには、Class#getResourceAsStream(String s) メソッドを使う。以下、定義ファイルに host=10.0.0.1、port=8080 と書いてあるものを、Client#init() メソッドの中で処理する例である。ひな型として以下の 3つのファイル (Client.java、ClientImpl.java、Client.properties) は 3点セットとし自分のパターンとして持っておきたい。 Client.properties ファイルの内容 (以下の 2行)
host=10.0.0.1
port=8080
Client.java ファイルの内容
public interface Client {

    public static final String PROPERTY_FILE = "Client.properties";
    public static final String HOST = "host";
    public static final String PORT = "port";

    public void init();
}
ClientImpl.java ファイルの内容
import java.io.InputStream;
import java.util.Properties;

public class ClientImpl implements Client {

    public static String DEFAULT_HOST = "192.168.0.1";
    public static int    DEFAULT_PORT = 1024;

    public static void main(String[] args) {

        Client client = new ClientImpl();
        client.init();
    }

    public void init() {

        this.getProperties();

System.out.println("host: " + DEFAULT_HOST);
System.out.println("port: " + DEFAULT_PORT);
    }

    protected void getProperties() {

        try {

            InputStream is = getClass().getResourceAsStream(Client.PROPERTY_FILE);
            Properties p = new Properties();
            p.load(is);

            if (p != null) {

                // Read a host address
                String host = p.getProperty(Client.HOST);
                if (host != null)
                    DEFAULT_HOST = host;

                // Read a port
                String port = p.getProperty(Client.PORT);
                if (port != null)
                    DEFAULT_PORT = Integer.parseInt(port);

            }
        } catch (Exception e) {
            System.out.println("File not found: " + Client.PROPERTY_FILE
                    + ".  Ignored the error.");
        }
    }
}
コンパイル方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> javac *.java
実行方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> java ClientImpl
Java で設定ファイル (Attribute = Value の形式) を用意して、その設定ファイルに書いた属性の値を読み込むには、Class#getResourceAsStream(String s) メソッドを使う。以下、定義ファイルに host=10.0.0.1、port=8080 と書いてあるものを、Client#init() メソッドの中で処理する例である。ひな型として以下の 3つのファイル (Client.java、ClientImpl.java、Client.properties) は 3点セットとし自分のパターンとして持っておきたい。 Client.properties ファイルの内容 (以下の 2行)
host=10.0.0.1
port=8080
Client.java ファイルの内容
public interface Client {

    public static final String PROPERTY_FILE = "Client.properties";
    public static final String HOST = "host";
    public static final String PORT = "port";

    public void init();
}
ClientImpl.java ファイルの内容
import java.io.InputStream;
import java.util.Properties;

public class ClientImpl implements Client {

    public static String DEFAULT_HOST = "192.168.0.1";
    public static int    DEFAULT_PORT = 1024;

    public static void main(String[] args) {

        Client client = new ClientImpl();
        client.init();
    }

    public void init() {

        this.getProperties();

System.out.println("host: " + DEFAULT_HOST);
System.out.println("port: " + DEFAULT_PORT);
    }

    protected void getProperties() {

        try {

            InputStream is = getClass().getResourceAsStream(Client.PROPERTY_FILE);
            Properties p = new Properties();
            p.load(is);

            if (p != null) {

                // Read a host address
                String host = p.getProperty(Client.HOST);
                if (host != null)
                    DEFAULT_HOST = host;

                // Read a port
                String port = p.getProperty(Client.PORT);
                if (port != null)
                    DEFAULT_PORT = Integer.parseInt(port);

            }
        } catch (Exception e) {
            System.out.println("File not found: " + Client.PROPERTY_FILE
                    + ".  Ignored the error.");
        }
    }
}
コンパイル方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> javac *.java
実行方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> java ClientImpl
Posted on 2005-12-23 by yas |

Java で、サイトにアクセスして HTML を取得する方法

Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Posted on 2005-12-20 by yas |