Maven - java.lang.ClassNotFoundException: com.mysql.jdbc.Pilote
J'ai une application Java basé sur Maven, et que vous voulez connecter au serveur MySQL.
Mon pom a:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
Avec runtime, que je veux me connecter au serveur MySQL lors de l'exécution - ont également essayé de compiler et de condition, mais ne fonctionne pas.
Le code SQL est un standard:
String dbClass = "com.mysql.jdbc.Driver";
Class.forName(dbClass);
Connection connection = DriverManager.getConnection(dbUrl,
username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
while (resultSet.next()) {
String tableName = resultSet.getString(1);
System.out.println("Table name : " + tableName);
}
Lorsque j'exécute ce de Eclipse, il fonctionne très bien et imprime les noms de table.
Cependant, à partir de maven, le produit INSTANTANÉ donne toujours une erreur lors de l'exécution, par >java -jar target\File.jar
après l'exécution de mvn clean install
.
java.lang.ClassNotFoundException: com.mysql.jdbc.Pilote
Ce qui me manque ici pour obtenir le maven build de travail? L'exécution de mvn clean install
donne aucune erreur et s'appuie amende. C'est seulement lors de l'exécution de l'INSTANTANÉ exe erreur se produit.
MySQL pot est dans mon .m2 repo, et j'ai essayé d'ajouter explicitement via mvn ligne de commande, mais il dit qu'il existe déjà.
- Est le m2 repo sur le chemin de la classe? Votre IDE généralement ajouter lors du lancement d'elle, mais si vous le lancez à partir de la ligne de commande, vous pourriez avoir à le spécifier manuellement.
Vous devez vous connecter pour publier un commentaire.
Modifier la portée de
compile
:Qui - puisque c'est l'étendue par défaut correspond à l'abandon, loin de définition de la portée du tout - mêmes chiffres pour le type:
Ont un coup d'oeil à ceci: https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html pour obtenir des informations détaillées sur la portée.
Voici une info rapide pour votre arrière-plan:
Vous avez spécifié le pilote JDBC pour avoir une portée
runtime
. La plupart des IDEs sera de toute façon d'ignorer la portée et ajoutez tous vos dépendances à leur classpath (par exemple, le chemin de la classe utilisée lorsque vous exécutez quelque chose en dehors d'eclipse. Par le champ d'applicationruntime
vous dites maven qu'il ne doit pas pack dependeny dans votre final jar depuis l'environnement d'exécution sera "prévoir que la dépendance àruntime
. E. g. vous devez l'ajouter manuellement à la variable classpath lors de l'appel de votre pot ou en modifier la portée decompile
qui va conduire à la pilote-jar être emballé à l'intérieur de votre pot et disponibles au moment de l'exécution.provided
ne contiennent pas le conducteur et le moins que l'on construit portéecompile
puisqu'il aura le pilote-jar emballé à l'intérieur. Vous avez peut-être envie d'avoir un coup d'oeil à ce lien docs.oracle.com/javase/tutorial/deployment/jar/downman.html car c'est peut être ajouté à votre classpath corretly..exe
de votre build, vous devriez ajouter le plugin définition, parce que Maven ne peut pas pack à un exe par défautLa réponse est ici - Comment puis-je créer un fichier exécutable JAR avec des dépendances à l'aide de Maven?
J'ai besoin de construire un uber pom, à l'aide de la réponse dans le lien ci - dessus, ce construit dans les dépendances (dans ce cas, le mysql, le fichier jar) dans un INSTANTANÉ unique fichier jar.
Assurez-vous juste que vous l'exécutez avec
mvn clean compile assembly:single
(pas l'habitudemvn clean package
ou quoi que ce soit.package
et est exécutée lors de l'exécution demvn clean package
😉 Avoir un regard sur la façon de créer un Manifeste pour un exécutable jar encore une fois - je penser que c'est votre question - rien de ce qui concerne Maven 😉Depuis que vous êtes à l'exécution du projet en "java-jar" et aussi que vous avez les dépendances, donc, vous devez utiliser deux plugins maven. Le premier exemplaire de dépendances dans un dossier à l'intérieur du dossier cible (par exemple, lib/), tandis que l'emballage et le second pour spécifier le chemin qui doit être le même que le premier(lib/). J'ai eu le même problème et voici ce que j'ai fait:
J'ai eu ce problème aussi. J'ai essayé d'utiliser des plugins pour fixer le connecteur à classpath mais il ne fonctionne pas. J'ai essayé de changer de version, il n'a pas de travail. J'ai passé deux nuits à savoir que j'avais besoin de le spécifier dans pom.xml que j'ai besoin de mon colis à une "guerre".
Peut-être que c'est parce que votre projet ne sais pas de quel type il est, donc, essayez de mettre ce:
juste à côté de votre version de projet. Quelque chose comme ceci:
Peut-être qu'il ne convient pas à votre problème, mais peut-être quelqu'un aura besoin d'elle.
Ajouter ce code
à porm.xml fichier dans votre projet maven