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

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

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

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

Q&A

解決済

1回答

4943閲覧

javaが実行できない(実行環境 java version jdk1.8.0)

Ryuakira

総合スコア16

Java

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

0グッド

0クリップ

投稿2023/11/11 19:57

編集2023/11/11 19:59

実現したいこと

Eclipseで開発したjavaのプロジェクトをビルドしてjarファイルを作成しましたが、
エラーが出てしまい実行できません。

お知恵をお借りしたいです。

前提

Eclipseの設定にあるコンパイラ準拠は1.8にワークスペースおよびプロジェクト固有双方設定しており、
javaプロジェクトのJREはJDK 1.8.0を使用しており、実行環境のjavaおよびjavacのバージョンは 1.8.0になっています。
またEclipseのant統合を使用してのビルドだとjava11にしないといけないというエラーが出たので
外部ツールの起動設定でビルドを行っています。
Eclipse上でビルドを行ったjavaプロジェクトをデバックすること自体はできています。
※ただいつから発生したのかが特定できていないのですが、Eclipse起動後、初回だけデバック実行時にエラーが出るようになりました。
もう一度実行すると問題なく実行できています。

java11にバージョンを上げてしまえば簡単なのですが、
あいにくjavaのバージョンを1.8.0から上げることはできない条件になっており、どうにか解決せざる得ない状況です。
ライブラリーは下記のものを使用しています。(enterpriseはsalesforceのsoap apiを使用するためのものです)
イメージ説明

発生している問題・エラーメッセージ

①デバック実行時の初回だけに発生 プロジェクト '○○○○○' でビルダー '統合外部ツール・ビルダー' の実行中にエラーが発生しました。 JRE version less than 11 is not supported. ②ビルドして作成されたjarの実行時に発生 Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:330) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:275) at java.util.jar.JarVerifier.update(JarVerifier.java:230) at java.util.jar.JarFile.initializeVerifier(JarFile.java:383) at java.util.jar.JarFile.ensureInitialization(JarFile.java:612) at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69) at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:991) at java.net.URLClassLoader.defineClass(URLClassLoader.java:451) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)![![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-12/a6c1e56e-f89f-4add-9a38-1060fb10fcdb.png)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-12/95442b77-6959-41f2-982f-8ce6c1994baf.png)

該当のソースコード

build.xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<project name="○○○○Ant" default="build" basedir="."> 3 4 <property name="src.dir" value="○○○○\src" /> 5 <property name="bin.dir" value="○○○○\bin" /> 6 <property name="classes.dir" value="○○○○\bin\classes" /> 7 <property name="lib.dir" value="○○○○\lib"/> 8 <property name="jar.dir" value="○○○○\jar"/> 9 <property name="zip.dir" value="○○○○\zip"/> 10 <property name="conf.dir" value="○○○○\conf"/> 11 <property name="debug" value="true"/> 12 13 <target name="clean"> 14 <delete dir="${bin.dir}" /> 15 </target> 16 17 <target name="compile"> 18 <mkdir dir="${bin.dir}" /> 19 <javac srcdir="${src.dir}" destdir="${bin.dir}" includeantruntime="false" source="1.8" target="1.8" debug="${debug}"> 20 <compilerarg value="-bootclasspath"/> 21 <compilerarg value="○○○○\java\jdk1.8.0_202\jre\lib\rt.jar"/> 22 <compilerarg value="-g:source,lines,vars"/> 23 <classpath> 24 <fileset dir="${lib.dir}" includes="*.jar" /> 25 </classpath> 26 </javac> 27 </target> 28 29 <target name="jar" depends="compile"> 30 <mkdir dir="${jar.dir}"/> 31 <jar destfile="${jar.dir}/○○○○.jar" basedir="${bin.dir}"> 32 <manifest> 33 <attribute name="Main-Class" value="○○○○.MainController" /> 34 </manifest> 35 <fileset dir="${lib.dir}" includes="*.jar" /> 36 <fileset dir="${src.dir}" includes="*.jar" /> 37 <zipgroupfileset dir="${lib.dir}" includes="*.jar"/> 38 </jar> 39 </target> 40 41 <target name="zip" depends="compile"> 42 <mkdir dir="${zip.dir}"/> 43 <zip destfile="${zip.dir}/○○○○_Batch.zip" basedir="${bin.dir}"> 44 <fileset dir="${conf.dir}" includes="*.properties" /> 45 <fileset dir="${lib.dir}" includes="*.jar" /> 46 <zipgroupfileset dir="${lib.dir}" includes="*.jar"/> 47 </zip> 48 </target> 49 50 <target name="build" depends="clean, jar, zip"> 51 <echo message="Build completed successfully"/> 52 </target> 53</project>

試したこと

開発環境のjavaおよびjavacのバージョン確認(1.8.0)
ビルドされたjarに含まれているクラスのjava バージョンの確認(52)
ant統合の使用をやめて、外部ツールの起動設定からantの実行
ライブラリーをjdk1.8.0からEclipseの初期インストール済のjavaSE-1.8への変更(効果なし)

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

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

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

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

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

Ryuakira

2023/11/12 04:00

ご指摘ありがとうございます。 こちらの内容、プログラミングに関係がないということでしょうか。
guest

回答1

0

ベストアンサー

Ant + JDK1.8という構成を現在使っていないので、間違っていたら申し訳ありませんが、
Eclipse 2022-03からAntがJava 11を使うようにアップデートされているようです。
https://stackoverflow.com/questions/75336081/running-ant-tasks-in-eclipse-with-java-1-8-lead-to-jre-version-less-than-11-is

※同リンク先のソース「JavaCore.VERSION_1_8 → JavaCore.VERSION_11」
https://github.com/eclipse-platform/eclipse.platform/pull/6/commits/89cdd3370482bff681618ca46b6250a0a94b4319

このため、Eclipse 2021にダウングレードすることも、ご検討ください。
https://www.eclipse.org/downloads/packages/release/2021-12/r

署名について

署名に関しては、おそらく「META-INF/*.SF,META-INF/*.DSA,META-INF/*.RSA」のファイルを除外すると問題なくなると思います。

依存関係にあるJARの一部は署名付きJARであるため、それらを1つのJARにまとめてそのJARを実行すると、署名付きJARの署名が一致せず、署名の不一致に関するセキュリティ例外が発生します。

jarファイル=zipファイルなので、中身を見たりして'META-INF/*.SF' 'META-INF/*.DSA' 'META-INF/*.RSA'を削除することも有効です。

コンパイルされたjarでは、セキュリティ署名されたファイルを削除する必要があります。 これを行うには、次のコマンドに従ってください。
zip -d jarfile.jar 'META-INF/*.SF' 'META-INF/*.DSA' 'META-INF/*.RSA'

https://stackoverflow.com/questions/34855649/invalid-signature-file-digest-for-manifest-main-attributes-exception-while-tryin

投稿2023/11/12 05:32

編集2023/11/12 12:51
KT001

総合スコア668

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

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

Ryuakira

2023/11/12 12:24

ご回答ありがとうございます。 また環境準備に時間がかかってしまい返信が遅くなってしまい申し訳ございません。 ご指摘いただいた通り、Eclipseは最新のものを使用していたので2021-12にバージョンダウンしてみました。 その結果、デバック時に初回だけ表示されるエラーはなくなりました。 ただバージョンダウンしたEclipseで再度ビルドしてみたのですが、作成されたjarの方では変わりなくエラーが表示されました。また署名に関してはご教授いただいたコマンドを実行してみたところ、該当のファイルは存在しないとのことで削除することができませんでした。 アドバイスをいただいたのにもかかわらず、解決までもっていくことができず申し訳ございません。 他に何かかできないか探してみます。
Ryuakira

2023/11/12 12:39

ありがとうございます! コマンドで'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'を消そうとしたときは該当のものがないとなっておりましたが、7zipでjarを開いてみると該当のものがあったので削除したところ実行できるようになりました! ほんとありがとうございます…
KT001

2023/11/12 12:46

すみません。参照元(stackoverflow)のコマンドが間違っていたので、訂正させて頂きます。対象は、META-INF/の*.SF、*.DSA、*.RSAとなります。 zip -d 対象ファイル.jar 'META-INF/*.SF' 'META-INF/*.DSA' 'META-INF/*.RSA' 上記コマンドを試して頂くか、jarを→zipにリネーム&解凍して、ファイル検索などで「*.SFと*.DSAと*.RSAがないか」ご確認ください。
KT001

2023/11/12 12:54 編集

コメントが入れ違いましたが、環境周りは分かり辛いので解決して良かったです!ご確認ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問