5

倹約を使用する基本的な Java アプリケーションを作成しようとしています。私が見逃しているのは、動作中のjarファイルです。

公式 Web サイトのダウンロード ページから 0.8.0 gz バージョンの thrift をダウンロードし、自分で jar アーカイブを作成しました ( jar cf thrift-0.8.0.jar src/org)。新しい jar ファイルをプロジェクト ディレクトリに移動しました。次に、この jar ファイルを手動でプロジェクトに追加しました。NetBeans IDE で作業しています。すべてが機能するように見えますが、機能しません - リサイクル ライブラリを使用したいすべての場所で赤いエラー メッセージが表示されます。これは私のコードの一部です:

package com.blogspot.symfonyworld.thrift;

import com.blogspot.symfonyworld.thrift.server.MainService;
import org.apache.thrift.TException;

public class MainServiceHandler implements MainService.Iface {

  @Override
    public int add(int n1, int n2) throws TException {
        return n1 + n2;
    }

    @Override
    public int sub(int n1, int n2) throws TException {
        return n1 + n2;
    }

}

および他のファイル:

/**
 * Autogenerated by Thrift Compiler (0.8.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
package com.blogspot.symfonyworld.thrift.server;

import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;

import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MainService {

  public interface Iface {

    public int add(int n1, int n2) throws org.apache.thrift.TException;

    public int sub(int n1, int n2) throws org.apache.thrift.TException;

  }

  public interface AsyncIface {

    public void add(int n1, int n2, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.add_call> resultHandler) throws org.apache.thrift.TException;

    public void sub(int n1, int n2, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.sub_call> resultHandler) throws org.apache.thrift.TException;

  }

ビルドを実行すると、次のエラーが発生します。

ant -f /var/www/laughing-thrift-duck jar
init:
Deleting: /var/www/laughing-thrift-duck/build/built-jar.properties
deps-jar:
Updating property file: /var/www/laughing-thrift-duck/build/built-jar.properties
Compiling 2 source files to /var/www/laughing-thrift-duck/build/classes
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/MainServiceHandler.java:4: package org.apache.thrift does not exist
import org.apache.thrift.TException;
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/server/MainService.java:9: package org.apache.thrift.scheme does not exist
import org.apache.thrift.scheme.IScheme;
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/server/MainService.java:10: package org.apache.thrift.scheme does not exist
import org.apache.thrift.scheme.SchemeFactory;
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/server/MainService.java:11: package org.apache.thrift.scheme does not exist
import org.apache.thrift.scheme.StandardScheme;
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/server/MainService.java:13: package org.apache.thrift.scheme does not exist
import org.apache.thrift.scheme.TupleScheme;
/var/www/laughing-thrift-duck/src/com/blogspot/symfonyworld/thrift/server/MainService.java:14: package org.apache.thrift.protocol does not exist
import org.apache.thrift.protocol.TTupleProtocol;
# and many many more...

主な質問は次のとおりです:パッケージ org.apache.thrift が存在しません- どうして?!

カスタムjarをプロジェクトにインポートする際に何が間違っていたのか、誰か教えてもらえますか? これは正確には倹約とは何の関係もないと思いますが、jar の一般的なインポートとは関係ありません。

4

2 に答える 2

9

公式 Web サイトのダウンロード ページから 0.8.0 gz バージョンの thrift をダウンロードし、自分で jar アーカイブを作成しました (jar cf thrift-0.8.0.jar src/org)。

なぜ独自のjarファイルを作成したのですか?そして、なぜソースファイルで作成したのですか? jar ライブラリには、すぐに使用できるバイトコード クラスが少なくとも含まれている必要があります。

thrift 自体を jar にコンパイルしてから使用する必要があります。

  • 閲覧する/lib/java
  • antターミナルで実行
  • ビルドフォルダーを確認すると、.jar
  • それを使う
于 2013-03-15T15:18:42.337 に答える
0

コマンドjar cf thrift-0.8.0.jar src/orgを使用して jar ファイルを作成すると、org パッケージ (およびその下) のクラスが org ではなく src/org に格納されるため、Java はそれを見つけることができません。代わりにこのコマンドを使用してみてくださいjar cf thrift-0.8.0.jar -C src org。正しい構造が生成されます。

実行して内容を確認することで確認できjar tf thrift-0.8.0.jarます。

于 2013-03-15T15:19:13.887 に答える