3

コマンドプロンプトでカスタムjarライブラリ( http://algs4.cs.princeton.edu/home/のalgs4.jar / stdlib.jar)を使用すると問題が発生します。ライブラリをIntelliJクラスパス設定(プロジェクト構造-> SDK->クラスパス)に追加し、IntelliJを使用して問題なくクラスを使用できるようにしました。

ただし、コマンドプロンプトでこれらのライブラリを使用できるようにもしたいと思います。Windowsの設定でCLASSPATH変数を設定していなくても、標準のJavaライブラリを使用する場合は、cmdでjavac/javaを問題なく使用できました。(おそらく、IntelliJがすべての起動/コンパイルですべての標準ライブラリのCLASSPATHをシステム全体で機能するように設定しているためです)。ただし、IntelliJクラスパス設定に2つのjarを追加した後でも、cmdで「javac」を使用できませんでした。次に、Windowsの設定でCLASSPATH変数を作成し、それらにjarを追加しました。この後、私は問題なくjavacでコンパイルすることができました。ただし、cmdでプログラムを実行しようとすると、次のようになります。

「エラー:メインクラスが見つかりませんでした。またはロードできませんでした」。

Windows CLASSPATHを設定する前に問題がなかった、標準ライブラリを含むjarライブラリのいずれかを使用すると、このエラーが発生します。自分のCLASSPATHを設定すると、intelliJによって設定されたクラスパスが上書きされると思います。CLASSPATHを削除すると、cmdで標準ライブラリをコンパイルして実行できましたが、2つのカスタムライブラリはできませんでした。

助けてください!

4

2 に答える 2

6

これらのライブラリをJDKではなくライブラリとしてモジュールの依存関係に追加してプロジェクトの一部にする必要があります。そうすると、jar内またはその近くにすべての依存関係があり、jarマニフェストを介して参照されるアーティファクトjarファイルを作成できます。ファイルクラスパスアーティファクトのヘルプセクションも参照してください。

于 2012-08-14T18:22:21.960 に答える
1

この投稿が指摘しているように、この特定のケースでは、ライブラリ内のクラスが「...デフォルトパッケージ(パッケージステートメントなし)に配置されている」という事実と、最新バージョンのJava(少なくとも7 8)自分のクラスもデフォルトのパッケージに含まれていない限り、デフォルトのパッケージに含まれるクラスを参照することを禁止します。」

この問題を解決するために、jarファイルから.javaファイルを抽出しました(ファイルタイプを.jarから.zipに変更し、ディレクトリに抽出します)。パッケージ名「com.sedge.stdlib」を作成し、必要に応じて.javaファイルを変更しました。たとえば、パッケージディレクティブを先頭に配置して、algs4からStdLib.javaクラスを変更しました。

package com.sedge.stdlib;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Locale;

/**
 *  <i>Standard output</i>. This class provides methods for writing strings
 *  and numbers to standard output.
 *  <p>
 *  For additional documentation, see <a href="http://introcs.cs.princeton.edu/15inout">Section 1.5</a> of
 *  <i>Introduction to Programming in Java: An Interdisciplinary Approach</i> by Robert Sedgewick and Kevin Wayne.
 *
 *  @author Robert Sedgewick
 *  @author Kevin Wayne
 */
public final class StdOut {
. . .
于 2015-06-04T20:29:16.520 に答える