4
votes

Intellij Java: java.lang.NoClassDefFoundError: org / json / JSONException

J'ai besoin d'aide. J'ai passé plusieurs heures à essayer de résoudre ce problème mais je ne peux pas. Je code sur Intellij Community Edition 2018.2 OS Windows 10, voici la structure de mon projet java.

ma source Main.java:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>id.simko</groupId>
    <artifactId>replicator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.0.0.jre8</version>
        </dependency>
    </dependencies>

</project>

SqlServerConn.java:

Manifest-Version: 1.0
Main-Class: id.simko.Main

mon MANIFEST.MF:

package id.simko;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.sql.*;

class SqlServerConn {
    private Connection conn;

    void connectDbSqlServer() {

        String db_connect_string = "jdbc:sqlserver://localhost";
        String db_name = "db1";
        String db_userid = "sa";
        String db_password = "sa";

        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(db_connect_string+";databaseName="+db_name,
                    db_userid, db_password);
            System.out.println("connected to sql server");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    void selectSqlServer(){
        Statement statement;
        try {
            // ... skipped for clarity
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Mon pom.xml:

package id.simko;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");

        SqlServerConn sqlServerConn = new SqlServerConn();
        sqlServerConn.connectDbSqlServer();
        sqlServerConn.selectSqlServer();
    }
}

J'ai configuré File -> Project Structure -> Artifacts, et ajouté libs / java-json.jar.

 entrez la description de l'image ici

Enfin, sur Intellij, j'ai cliqué sur Build -> Build Artifacts -> replicator.jar -> Build. Et mon fichier jar exécutable a été créé avec succès.

Mais quand j'ai essayé de l'exécuter, une erreur se produit. voici la capture d'écran.

 entrez la description de l'image ici

aidez-moi. //stackoverflow.com/questions/36868334/java-noclassdeffounderror-org-json-jsonexception">Java: NoClassDefFoundError: org / json / JSONException mais la solution ne peut pas résoudre mon problème. c'est peut-être un bogue d'Intellij?

=================================== ==================================

DERNIERE MISE A JOUR DE MOI: J'ai essayé pendant des heures jusqu'à ce que j'abandonne. Pour l'instant, le seul moyen possible de créer une application exécutable à partir d'un projet java dans Windows 10 consiste à NE PAS utiliser Intellij CE 2018.2. J'ai essayé NetBeans 8.2 IDE et j'ai réussi à créer une batte exécutable avec le plugin gradle & cygwin.

Je laisserai cette question sans réponse, car je sais qu'un jour quelqu'un aura un moyen, mais pour l'instant j'abandonne et j'ai essayé un IDE différent, au moins pour créer un exécutable.


8 commentaires

Les fichiers JAR externes que vous avez utilisés n'ont pas été attachés au fichier que vous avez créé.


Merci de votre aide. Comment puis-je le joindre?


ajoutez des fichiers JAR externes en tant que dépendance dans votre fichier pom


Comment créez-vous l'exécutable JAR? Utilisez-vous Maven pour empaqueter le JAR? Cette dépendance est-elle mentionnée dans pom.xml?


veuillez patienter, @GauravAgarwal. Je mettrai à jour ma question


@GauravAgarwal J'ai mis à jour ma question, ajouté une explication sur la façon dont j'ai créé le fichier exécutable. Je suis nouveau dans intellij, donc je ne suis pas sûr d'utiliser maven à 100%. le problématique java-json.jar, contenant la classe JSONException n'est pas mentionné dans pom.xml.


@Dika Où avez-vous obtenu json-jar ? Vous pouvez le décompresser et voir s'il existe une org.json.JSONException


@ 孙兴斌 Je l'ai obtenu d'ici: java2s.com/Code/Jar/j/ Téléchargezjavajsonjar.htm . Je suis sûr que java-json.jar fonctionne, car je peux créer et exécuter le projet avec succès. seulement lorsque j'ai compilé le projet dans un fichier exécutable, une erreur se produit


3 Réponses :


0
votes

Placez le fichier jar dans le dossier lib car pendant l'exécution, il ne peut pas identifier votre fichier jar, je pense que oui ..


0 commentaires

0
votes

Ouvrez votre replicator.jar (peut utiliser WinRAR) et voyez si la classe JSONException est disponible dans le fichier jar. Sinon, vous devez l'inclure dans votre pot. Pour cela, vous pouvez utiliser la teinte maven ( https://maven.apache.org/plugins / maven-shadow-plugin / ) ou assembler le plugin ( http: //maven.apache.org/plugins/maven-assembly-plugin/ ) pour inclure toutes les classes dépendantes dans votre fichier jar exécutable.

Ce message vous aiderait Inclure des dépendances dans un fichier jar avec Maven


1 commentaires

Merci pour l'info. s'il vous plaît voir ma question mise à jour. fyi, les fichiers jars de dépendance sont inclus mais ne sont pas chargés dans l'application principale. peut-être que cela peut fonctionner avec des outils comme one-jar, mais pour l'instant je n'ai pas le temps de l'expérimenter



1
votes

J'étais confronté au même problème. Après avoir passé des heures, j'ai trouvé une solution pour résoudre ce problème. Ce que je dois faire, c'est:

Accédez à: Fichier -> Structure du projet -> Bibliothèques Ajoutez "org.springframework.boot: spring-boot-configuration-processor: 2.3.4.RELEASE" dans les bibliothèques.

Maintenant nettoyez, construisez et exécutez le projet

Remarque: vous pouvez changer la version du package ci-dessus


0 commentaires