ちょっとハマッたのでメモ.
JavaでTCPサーバを書いてWindowsのコマンドプロンプトでコンパイルして実行しようとすると,
java TCPServer
Exception in thread "main" java.lang.NoClassDefFoundError: tcp/TCPServer (wrong name: tcp/TCPServer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: tcp.TCPserver. Program will exit.
という,エラー.
コンパイルは通る,classファイルもある.
どうしたものかと思って原因を調べると,原因が判明.
どうやらJavaのクラスファイルは、
packageの階層と同じディレクトリ構造にしないといけないらしく.
この例であれば、tcpserverというディレクトリを作り、
その中にコンパイルしたTCPServer.classを入れ、tcpserverの上位ディレクトリから
java tcpserver.TCPServer
もしくは
java tcpserver/TCPServer
で起動できるらしい.
Java未だによく分かってない.
勉強せねば...
参考リンク
実行時のNoClassDefFoundErrorが解決できません (http://oshiete1.goo.ne.jp/qa3105812.html)
分散プログラミングがしやすそうなのでErlangの勉強を始めた.
Erlangの本はコレ1冊あれば十分らしいので,とりあえずこれを読んでいく.

プログラミング言語Erlang
早速,ErlangをCentOS5.3にインストールしてみた.
yumで入れられなかったため,Erlangのサイトから最新のソースをDLしてコンパイル.
% wget http://www.erlang.org/download/otp_src_R13B01.tar.gz
% tar zxf otp_src_R13B01.tar.gz
% cd otp_src_R13B01/
% ./configure
% make
% su -
% make install
%
configureの最中に
No curses library functions found
というエラーが発生.
% sudo yum install ncurses-devel
で無事に解決.
ひとまずインストールは終わった.
Ubuntuならapt-get,MacならMacPortsでいれられる模様.
参考
http://d.hatena.ne.jp/shimooka/20070527/1180201255
http://d.hatena.ne.jp/sotarok/20080204/1202123608
EclipseでGoogleのAPIをいじるプログラムを書こうと思い、Coding in the Shade: Using Eclipse with Google Data APIsを見ながら設定していたのだが、いつまでもサンプルプログラムが動かず苦労したので、ここに導入方法をまとめておく。
Eclipse導入・目次
1.
Eclipseのダウンロード
2.
GData Java Client Libraryのダウンロード
3.
その他必要なライブラリのダウンロード
4.
サンプルプロジェクトの作成
5.
サンプルプログラムの実行
まずは、
公式サイトからEclipseを落とす。いろいろ種類があるが、ひとまず「
for Java Developers」で大丈夫そう。DLが終わったら、起動して適当な場所にworkspaceを作成する。
続いて様々な機能を提供してくれる
GData Java Client Libraryをダウンロードしてくる。
ここからダウンロード可能。ライブラリの中身も見たい人は
srcをダウンロードしてもいいが、APIを利用するだけであれば、
samplesの方でOK。解凍したら、eclipseフォルダに入れておく。
そのほか必要になるファイルをダウンロードしてくる。
これらのファイルは、
eclipse/gdata/third_partyに入れておく。
適当な名前のプロジェクトを新規作成し、最下部の「next」を押す。上のタブから「Libraries」を選び、「Add External JARs」から、
/gdata/java/libにある
gdata-client, gdata-client-meta, gdata-core, gdata-media, data-docs, gdata-docs-metaを追加する。
次に、3で
/gdata/third_partyに保存した
mail.jar, servlet-api.jar, activation.jarを読み込む。
Googleのドキュメントには上のライブラリを読み込めばいいと書いてあるが、これだけでは何度やってもサンプルプログラムで “
java.lang.NoClassDefFoundError“エラーが出てしまっていたが、
gdata/java/depsにある
google-collectと
jsrを読み込むことで解決した。
ここまで来れば、あと一息。Googleドキュメントの文書タイトルを読み込むサンプルプログラムを実行してみる。
import java.net.URL;
import com.google.gdata.client.docs.DocsService;
import com.google.gdata.data.docs.DocumentListEntry;
import com.google.gdata.data.docs.DocumentListFeed;
public class testDocumentsList {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
DocsService service = new DocsService("Document List Demo");
service.setUserCredentials("your_id@gmail.com", "your_password");
URL documentListFeedUrl = new URL("http://docs.google.com/feeds/documents/private/full");
DocumentListFeed feed = service.getFeed(documentListFeedUrl, DocumentListFeed.class);
for(DocumentListEntry entry : feed.getEntries()) {
System.out.println(entry.getTitle().getPlainText());
}
}
catch(Exception ex){
System.out.println("Exception: "+ ex.getMessage());
}
}
}
このとき、アカウント情報を追加しておくことをお忘れなく。これを実行すればコンソールにGoogleドキュメントに保存された文書のタイトルが表示されるはずである。
以上が、EclipseでJavaを使ってGoogle APIをいじるため下準備であった。
関連書籍


