classがあるのになぜClassNotFoundExceptionに報告するのですか?

1868 ワード

説明

 , 。 , jar , pom ,  java -jar  jar , 
Exception in thread "main" java.lang.NoClassDefFoundError
...
Caused by: java.lang.ClassNotFoundException: ...

ぶんせき


libパッケージの下にこのインタフェースが依存するjarパッケージがあります
ここまで読んで下を見ないで、どうして新聞に類が見つからないのか考えてみましょう.
パッケージ時にMANIFESTが同時に生成する.MFファイル、jarパッケージの基本情報を記述
Main-Classはプログラムの入り口を指定して、java-jar*を使うことができます.jarを起動する
Class-Pathはjarパケット依存関係を指定し、クラスローダはこのパスに基づいてclassをロードします.
はい、MANIFESTについて知りました.MFファイル、それでは私达はこのファイルを见て、ある読者はまだどのようにこのファイルを探して、あなたのプログラムのjarを解凍すればいいことを知らないかもしれません、unzip*.jarが見えます
Class-Pathでエラーが報告されているクラスを見て、私が赤い枠で囲まれたjarパッケージの中で、このjarパッケージの名前は私たちのlibパッケージの対応するjarの名前とは違います.
libパッケージの中はdspadinfoです.client-0.0.41-SNAPSHOT.jar
MANIFESTではMFファイル中はdspadinfoである.client-0.0.41-20190902.070402-1.jarは、タイムスタンプ付きの形式で、Snapshot Versionというスナップショットバージョンのjarをパッケージ化する際に唯一のバージョンを使用したことを説明しています.これはデフォルトで、名前が合わないので、対応するクラスにロードできず、上のエラーを報告しました.

解決する


mavenの公式ドキュメントには、スナップショットバージョンの処理について説明されています.http://maven.apache.org/share...
「-SNAPSHOT」のバージョン名を強制的に使うには、無効にするだけでいいです.
false

皆さんに私のプロジェクトの中の配置をあげて、参考にします

        org.apache.maven.plugins
        maven-jar-plugin
        
          
            
              true
              lib/
              *.dsp.redispositive.Application
              false
            
          
        

pomファイルの修正後、再パッケージ配置後、MANIFEST.MFファイルのClass-Pathのjarパッケージがdspadinfoです.client-0.0.41-SNAPSHOT.jar実行は問題ありません
似たような問題があったら、この解決策を考えてほしい.