ClassNotFoundException lors de l'exécution POT, pas d'erreurs lors de l'exécution dans IntelliJ IDEA

Je viens juste de commencer à construire des applications Java (j'ai .NET de l'expérience) et j'étais en train de construire une petite application de test, dont l'ensemble du code est: est-ce

package com.company;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Main {

    public static void main(String[] args) throws SQLException {
        System.out.println("Buna lume!");

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setIntegratedSecurity(true);
        ds.setServerName("localhost");
        ds.setPortNumber(1433);
        ds.setDatabaseName("Test");
        Connection con = ds.getConnection();

        String SQL = "SELECT * FROM Test WHERE ID = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setInt(1, 2);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            System.out.println(rs.getInt(1) + ", " + rs.getString(2));
        }
        rs.close();
        stmt.close();

        con.close();
    }
}

Si je lance l'application dans l'IDE IntelliJ IDEA 12.1.6 Community Edition), ayant le code SQL Server disponible, l'application fonctionne très bien en train de faire exactement ce qu'il devrait.

Le Pilote SQL Server est téléchargé à partir de Microsoft et ajouté comme une Bibliothèque Externe. J'ai créé un artefact en tant que fichier JAR :

ClassNotFoundException lors de l'exécution POT, pas d'erreurs lors de l'exécution dans IntelliJ IDEA

Maintenant, si je comprend l'sqljdbc4.jar dans le cliTest.jar (mon POT) l'a entraîné POT de graisse (550kB et comprend les classes dans ce POT trop). Ou je peut l'exclure. De toute façon, la course

java -jar cliTest.jar

Résultats dans

Buna lume!
Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/sqlserv
er/jdbc/SQLServerDataSource
        at com.company.Main.main(Main.java:15)
Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLSer
verDataSource
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

Je parie que je suis absent quelque chose d'assez basique, mais je ne peux pas comprendre ce qui exactement qui est à l'origine.

LE1 : j'ai essayé d'ajouter sqljdbc4.jar (bien qu'il ne semblait pas nécessaire) et sqljdbc_auth.dll dans le répertoire contenant le POT mais toujours pas de changement.

Plus tard edit 2 : sur la Base des Nikolay réponse, j'ai effectué les opérations suivantes :

  1. Supprimé l'artefact existants
  2. Créé un nouvel artefact comme suit :

ClassNotFoundException lors de l'exécution POT, pas d'erreurs lors de l'exécution dans IntelliJ IDEA

ClassNotFoundException lors de l'exécution POT, pas d'erreurs lors de l'exécution dans IntelliJ IDEA

.. et a abouti à ceci :

ClassNotFoundException lors de l'exécution POT, pas d'erreurs lors de l'exécution dans IntelliJ IDEA

  1. Build -> Construire des artefacts -> cliTest.jar -> Reconstruire

  2. Invite de CMD dans le dossier contenant :

[cliTest.jar 566 KO a été généré]

java-jar cliTest.jar

Maintenant, je reçois :

Exception in thread "main" java.lang.SecurityException: Invalid signature file d
igest for Manifest main attributes
    at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
    at sun.security.util.SignatureFileVerifier.process(Unknown Source)
    at java.util.jar.JarVerifier.processEntry(Unknown Source)
    at java.util.jar.JarVerifier.update(Unknown Source)
    at java.util.jar.JarFile.initializeVerifier(Unknown Source)
    at java.util.jar.JarFile.getInputStream(Unknown Source)
    at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
    at sun.misc.Resource.cachedInputStream(Unknown Source)
    at sun.misc.Resource.getByteBuffer(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

OriginalL'auteur Andrei Rînea | 2013-11-03