質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3944閲覧

Java ライブラリの実行が通らず、困っています

karakorum

総合スコア20

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2020/03/14 06:11

編集2020/03/14 08:27

javaの基礎を"スッキリわかるJava入門 実践編"で勉強中の初心者です。

●環境
・java version 13.0.2
・Atom 1.44.0
・script 3.25.0
・jdk 13.0.2
●OS :windows10

質問内容

本を読んでいて、どうしても分からないところがあったので質問させてください。
8.4.2 簡単なログの出力 リスト8-5が実行できません。

import static java.lang.System.out; import org.apache.commons.logging.*; public class P233{ public static void main(String[]args){ Log logger=LogFactory.getLog(P233.class); if(args.length !=2){ logger.error("起動引数の数が異常: "+args.length); } } }

まず、このサイトにアクセスして、ライブラリをダウンロードしました。
その後、大雑把ですが、以下のようなディレクトリ構造にしました。。

java | |ーーcommons-logging-1.2ーーcommons-logging-1.2.jar //ダウンロードしたライブラリ | |ーbook_javaPracticeー8ChapterーP233.java //mainのjavaファイル

その後、c:java/sample/ ディレクトリで、下記のようにコンパイルをして、うまくできました。
> javac -cp C:\java\commons-logging-1.2\commons-logging-1.2.jar p233.java
その後、いくつかの方法で実行しましたが、うまくいきませんでした。

######①c:\java\sample ディレクトリにて、パス指定をして実行

pattern1

1> java -cp C:/java.commons-logging-1.2.commons-logging-1.2.jar p233 2Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3エラー: メイン・クラスp233を検出およびロードできませんでした

pattern2

1> java java.commons-logging-1.2.commons-logging-1.2.jar p233 2Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3エラー: メイン・クラスjava.commons-logging-1.2.commons-logging-1.2.jarを検出およびロードできませんでした 4原因: java.lang.ClassNotFoundException: java.commons-logging-1.2.commons-logging-1.2.jar

pattern3

1> java -jar C:\java\commons-logging-1.2\commons-logging-1.2.jar P233 2> java -jar C:\java\commons-logging-1.2\commons-logging-1.2.jar P233 3Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 4C:\java\commons-logging-1.2\commons-logging-1.2.jarにメイン・マニフェスト属性がありません

pattern4

1>java -classpath C:\java\commons-logging-1.2\commons-logging-1.2.jar;P233 2P233.java : 用語 'P233.java' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識 3されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行 4してください。 5発生場所 行:1 文字:70 6+ ... sspath C:\java\commons-logging-1.2\commons-logging-1.2.jar; P233.java 7+ ~~~~~~~~~ 8 + CategoryInfo : ObjectNotFound: (P233.java:String) [], CommandNotFoundException 9 + FullyQualifiedErrorId : CommandNotFoundException

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

①pattern3のエラーから、メインマニフェストを調べてみた。
このサイトの通り自分でも実際にやってみた。一からJARファイルを作った場合、実行までうまくいくことが分かった。
commons-logging-1.2.jarの中のMANIFEST.MFが関係していると思った。
作業ディレクトリをc:\java\commons-logging-1.2\ に変更。
MANIFEST.MF

Manifest-Version: 1.0 Export-Package: org.apache.commons.logging;version="1.2",org.apache.co mmons.logging.impl;version="1.2" Implementation-Title: Apache Commons Logging Built-By: tn Tool: Bnd-2.1.0.20130426-122213 Implementation-Vendor: The Apache Software Foundation Implementation-Vendor-Id: org.apache Specification-Title: Apache Commons Logging Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt Bundle-SymbolicName: org.apache.commons.logging X-Compile-Target-JDK: 1.2 Implementation-Version: 1.2 Specification-Vendor: The Apache Software Foundation Bundle-Name: Apache Commons Logging Created-By: Apache Maven Bundle Plugin X-Compile-Source-JDK: 1.2 Bundle-Vendor: The Apache Software Foundation Build-Jdk: 1.7.0_55 Bundle-Version: 1.2.0 Bnd-LastModified: 1404583913415 Bundle-ManifestVersion: 2 Bundle-Description: Apache Commons Logging is a thin adapter allowing configurable bridging to other, well known logging systems. Bundle-DocURL: http://commons.apache.org/proper/commons-logging/ Import-Package: javax.servlet;version="[2.1.0,3.0.0)";resolution:=opti onal,org.apache.avalon.framework.logger;version="[4.1.3,4.1.5]";resol ution:=optional,org.apache.log;version="[1.0.1,1.0.1]";resolution:=op tional,org.apache.log4j;version="[1.2.15,2.0.0)";resolution:=optional Include-Resource: META-INF/NOTICE.txt=NOTICE.txt,META-INF/LICENSE.txt= LICENSE.txt Specification-Version: 1.2 Implementation-Build: tags/LOGGING_1_2_RC2@r1608092; 2014-07-05 20:11: 44+0200 Archiver-Version: Plexus Archiver

######②拡張子.maniファイルの作成。
作業ディレクトリにsample.maniを作成。

sample.mani

1Main-Class: P233

実行

> jar uvfm commons-logging-1.2.jar sample.mani 3月 14, 2020 2:59:39 午後 java.util.jar.Attributes read WARNING: Duplicate name in Manifest: Main-Class. Ensure that the manifest does not have duplicate entries, and that blank lines separate individual sections in both your manifest and in the META-INF/MANIFEST.MF entry in the jar file. マニフェストが更新されました

MANIFEST.MF

Manifest-Version: 1.0 Export-Package: org.apache.commons.logging;version="1.2",org.apache.comm ons.logging.impl;version="1.2" Implementation-Title: Apache Commons Logging Built-By: tn Tool: Bnd-2.1.0.20130426-122213 Implementation-Vendor: The Apache Software Foundation Implementation-Vendor-Id: org.apache Specification-Title: Apache Commons Logging Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt Bundle-SymbolicName: org.apache.commons.logging X-Compile-Target-JDK: 1.2 Implementation-Version: 1.2 Specification-Vendor: The Apache Software Foundation Bundle-Name: Apache Commons Logging Created-By: Apache Maven Bundle Plugin X-Compile-Source-JDK: 1.2 Bundle-Vendor: The Apache Software Foundation Build-Jdk: 1.7.0_55 Bundle-Version: 1.2.0 Bnd-LastModified: 1404583913415 Bundle-ManifestVersion: 2 Bundle-Description: Apache Commons Logging is a thin adapter allowing co nfigurable bridging to other, well known logging systems. Bundle-DocURL: http://commons.apache.org/proper/commons-logging/ Import-Package: javax.servlet;version="[2.1.0,3.0.0)";resolution:=option al,org.apache.avalon.framework.logger;version="[4.1.3,4.1.5]";resolutio n:=optional,org.apache.log;version="[1.0.1,1.0.1]";resolution:=optional ,org.apache.log4j;version="[1.2.15,2.0.0)";resolution:=optional Include-Resource: META-INF/NOTICE.txt=NOTICE.txt,META-INF/LICENSE.txt=LI CENSE.txt Specification-Version: 1.2 Implementation-Build: tags/LOGGING_1_2_RC2@r1608092; 2014-07-05 20:11:44 +0200 Archiver-Version: Plexus Archiver Main-Class: P233

一番下に、ちゃんと追加された。

c:\java\commons-logging-1.2 にて実行

pattern1

1> java -jar commons-logging-1.2.jar P233 2Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3エラー: メイン・クラスP233を検出およびロードできませんでした 4原因: java.lang.ClassNotFoundException: P233 5

pattern2

1> java -cp C:/java.commons-logging-1.2.commons-logging-1.2.jar p233 2Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3エラー: メイン・クラスp233を検出およびロードできませんでした 4原因: java.lang.ClassNotFoundException: p233Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 5エラー: メイン・クラスjava.commons-logging-1.2.commons-logging-1.2.jarを検出およびロードできませんでした

pattern3

1> java -jar C:\java\commons-logging-1.2\commons-logging-1.2.jar P233 2Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3エラー: メイン・クラスP233を検出およびロードできませんでした 4原因: java.lang.ClassNotFoundException: P233

実行できず・・・。

######③ライブラリの中にP233を追加し、実行
jar uvf .\commons-logging-1.2.jar .\P233.java
これで、再度②のように実行しましたが、うまくいかず。
というか、仮に③の方法が正しいとしたら、ライブライリを使うのがいちいち大変すぎるので、
③の方法はありえないと、思っています。

長くなりましたが、回答よろしくお願いします。

#追記
jarファイルをP233.javaと同じディレクトリに置いたうえで、コマンドプロンプトで実行したら、エラーなく実行できました。

>java -cp C:\java\book_javaPractice\8Chapter\commons-logging-1.2.jar; P233 aaaaaaaa 3月 14, 2020 5:19:28 午後 P233 main 重大: 起動引数の数が異常: 0

ただ、同じコードでやってもatomで実行することができませんでした。
仕方ないのでしょうか?

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/14 08:50

java -cp C:/java.commons-logging-1.2.commons-logging-1.2.jar p233 の p233 の p が小文字だからでは?
karakorum

2020/03/14 09:34

回答ありがとうございます。 大文字にしてもできませんでした。
hoshi-takanori

2020/03/14 10:02

あ、そうか。javac コマンドと java コマンドで -cp オプションの使い方が変わって、java コマンドの場合、カレントディレクトリに .class ファイルがある場合は ;. を付ける必要があるのでした。また、javac コマンドにはファイル名を指定するので p233.java でも P233.java でも通ってしまいますが、java コマンドにはクラス名を指定するので P233 にする必要があります。あと、atom は使ってないので分かりません。
guest

回答1

0

ベストアンサー

もう解決してるかな。

java -cp C:\java\book_javaPractice\8Chapter\commons-logging-1.2.jar; P233

が、動くなら

CMD

1java -cp C:\java\book_javaPractice\8Chapter\commons-logging-1.2.jar;C:\java\book_javaPractice\8Chapter P233

で、動くのでは?

フルパスじゃないのでカレントじゃないと動かないだけだと思うけど。

わざわざ、jarを移動させたくないなら。

CMD

1java -cp C:\java\commons-logging-1.2\commons-logging-1.2.jar;C:\java\book_javaPractice\8Chapter P233

C:\java\book_javaPractice\8Chapterの部分は、Chapterごとに変更する必要ありますが。

投稿2020/03/23 05:29

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karakorum

2020/03/28 05:32

お礼が遅れてしまい申し訳ありません。 java -cp C:\java\commons-logging-1.2\commons-logging-1.2.jar;C:\java\book_javaPractice\8Chapter P233 で、jarファイルを移動させなくても無事実行させることができました。 ずっと引っかかっていたので、スッキリしました! ありがとうございした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問