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で実行することができませんでした。
仕方ないのでしょうか?
回答1件
あなたの回答
tips
プレビュー