Je viens de télécharger Maven et j'essayais d'exécuter la commande simple trouvée sur la page "Maven en cinq minutes" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Voici la commande:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Lorsque je l'exécute, j'obtiens une erreur avec le certificat SSL et je ne peux pas télécharger à partir du référentiel central Maven à https://repo.maven.apache.org/maven2 . L'erreur est «SunCertPathBuilderException: impossible de trouver un chemin de certification valide vers la cible demandée».
Je suis assis derrière un pare-feu d'entreprise et j'ai correctement configuré les paramètres de proxy pour les deux http
et l' https
accès via le settings.xml
fichier. Je doute que quiconque télécharge Maven et l'exécute pour la première fois doive importer le certificat SSL du référentiel Maven, donc le problème doit être avec le proxy. Est-ce que quelqu'un a de l'expérience avec ça?
Voici la trace de la pile en mode débogage complet (-X):
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10+02:00)
Maven home: C:\Projects\maven\bin\..
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_45\jre
Default locale: it_IT, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
[DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2 via *****:8080 with username=*****, password=***
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)
at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:81)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:288)
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)
... 23 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
... 26 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)
at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
... 4 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:85)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)
... 8 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 27 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 33 more
Réponses:
Le fait est que votre plugin maven essaie de se connecter à un référentiel distant https
(par exemple https://repo.maven.apache.org/maven2/ )
C'est une nouvelle connectivité SSL pour Maven Central qui a été mise à disposition en août 2014!
Alors s'il vous plaît, pouvez-vous vérifier que votre settings.xml a la bonne configuration.
Vous pouvez également utiliser le simple référentiel http maven comme celui-ci
S'il vous plaît laissez-moi savoir si ma solution fonctionne;)
J.
la source
La réponse ci-dessus est une bonne solution de travail, mais voici comment le faire si vous souhaitez utiliser le référentiel SSL:
Maintenant, ouvrez une invite de commande et tapez (utilisez vos propres chemins):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore
Vous pouvez maintenant exécuter à nouveau la commande avec le paramètre
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Sous Linux, utilisez le chemin absolu
-Djavax.net.ssl.trustStore=/tmp/mavenKeystore
sinon cela arrivera
Comme ça:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Optionnel:
Vous pouvez utiliser la
MAVEN_OPTS
variable d'environnement pour ne plus avoir à vous en soucier. Voir plus d'informations sur laMAVEN_OPTS
variable ici :la source
sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
Mettre à jour
Je viens de tomber sur ce rapport de bogue:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
Cela semble être la cause de nos problèmes ici. Quelque chose avec ca-certificate-java rencontrant une erreur et ne remplissant pas complètement les cacerts. Pour moi, cela a commencé à se produire après la mise à niveau vers 15.10 et ce bogue s'est probablement produit pendant ce processus.
La solution de contournement consiste à exécuter la commande suivante:
Si vous vérifiez le contenu du keystore (comme dans ma réponse d'origine), vous en verrez maintenant un tas d'autres, y compris le DigiCert Global Root CA.
Si vous avez suivi le processus dans ma réponse d'origine, vous pouvez nettoyer la clé que nous avons ajoutée en exécutant cette commande (en supposant que vous n'ayez pas spécifié d'alias différent):
Maven fonctionnera désormais correctement.
Réponse originale
Je voudrais juste développer la réponse d'Andy sur l'ajout du certificat et la spécification d'un keystore. Cela m'a permis de démarrer et, combiné à des informations ailleurs, j'ai pu comprendre le problème et trouver une autre (meilleure?) Solution.
La réponse d'Andy spécifie un nouveau keystore avec le certificat Maven spécifiquement. Ici, je vais un peu plus large et j'ajoute le certificat racine au truststore java par défaut. Cela me permet d'utiliser mvn (et d'autres trucs java) sans spécifier de keystore.
Pour référence, mon système d'exploitation est Ubuntu 15.10 avec Maven 3.3.3.
Fondamentalement, le truststore Java par défaut dans cette configuration ne fait pas confiance au certificat racine du dépôt Maven (DigiCert Global Root CA), il doit donc être ajouté.
Je l'ai trouvé ici et téléchargé:
https://www.digicert.com/digicert-root-certificates.htm
Ensuite, j'ai trouvé l'emplacement du truststore par défaut, qui réside ici:
Vous pouvez voir quels certificats y sont actuellement en exécutant cette commande:
Lorsque vous y êtes invité, le mot de passe par défaut du keystore est "changeit" (mais personne ne le fait jamais).
Dans ma configuration, l'empreinte digitale de "DigiCert Global Root CA" n'existait pas (DigiCert l'appelle "empreinte digitale" dans le lien ci-dessus). Alors, voici comment l'ajouter:
Cela devrait vous demander si vous faites confiance au cert, dites oui.
Utilisez à nouveau keytool -list pour vérifier que la clé existe. Je n'ai pas pris la peine de spécifier un alias (-alias), donc ça s'est terminé comme ceci:
Ensuite, j'ai pu exécuter les commandes mvn comme d'habitude, pas besoin de spécifier le magasin de clés.
la source
Vous pouvez utiliser l'
-Dmaven.wagon.http.ssl.insecure=true
optionla source
Vous pouvez importer le certificat SSL manuellement et l'ajouter simplement au fichier de clés.
Pour les utilisateurs Linux,
Syntaxe:
Exemple :
la source
Ce n'est peut-être pas la meilleure solution. J'ai changé mon maven de 3.3.x à 3.2.x. Et ce problème est parti.
la source
J'ai en fait eu le même problème.
quand je cours
sur mon projet maven, j'obtiens cette erreur de certificat par l'outil maven.
J'ai suivi la réponse de @Andy jusqu'au moment où j'ai téléchargé le .cer fichier
après cela, le reste de la réponse n'a pas fonctionné pour moi mais j'ai fait ce qui suit (je fonctionne sur une machine Linux Debian)
tout d'abord, exécutez:
par exemple dans mon cas c'est:
s'il vous demande le mot de passe, appuyez simplement sur Entrée.
cette commande est censée lister tous les certificats ssl acceptés par le java. lorsque j'ai exécuté cette commande, dans mon cas, j'ai obtenu 93 certificats par exemple.
Ajoutez maintenant le fichier téléchargé .cer au fichier cacerts en exécutant la commande suivante:
écrivez votre mot de passe sudo puis il vous demandera le mot de passe du keystore
celui par défaut est changeit
puis dites y que vous faites confiance à ce certificat.
si vous exécutez la commande
encore une fois, dans mon cas, j'ai eu 94 contenus des cacerts fichier
cela signifie qu'il a été ajouté avec succès.
la source
Une solution rapide consiste à ajouter ce code dans votre pom.xml:
Où jamais est pour éviter la recherche d'un certifié.
la source
J'obtenais la même erreur sur le certificat SSL lorsque Maven a essayé de télécharger automatiquement les modules nécessaires.
En guise de remède, j'essayais d'implémenter la réponse de Luke ci-dessus, mais j'ai constaté que le certificat DigiCert Global Root CA est déjà dans le keystore de confiance de Java.
Ce qui m'a aidé a été d'ajouter
%JAVA_HOME%\bin
à la variable Path (j'utilise Windows). Et%JAVA_HOME%
c'est un emplacement JDK, pas seulement un emplacement JRE, puisque Maven a besoin d'un JDK.Je ne sais pas pourquoi cela a aidé, mais cela a été le cas. Je suis absolument sûr que c'est la seule chose que j'ai changée.
la source
Si ce problème se produit pour le référentiel HTTPS , par exemple https://repo.spring.io/milestone, vous pouvez simplement essayer de le remplacer par non sécurisé: http://repo.spring.io/milestone . Et c'est tout
la source
Étape 1: OBTENEZ le contenu du certificat du site Web (vous voulez l'avoir importé en tant que racine de confiance)
Étape 2: enregistrez le tout (y compris les lignes BEGIN CERTIFICATE et END CERTIFICATE, qui sont significatives dans ce cas) sous godaddyg2.pem et importez-le dans mon magasin de confiance via:
Étape 3: Importez le certificat dans le keystore (magasin de clés de confiance Java)
la source
Ce qui a fonctionné pour moi:
Configurer les
<proxy>
paramètres dans${MAVEN_HOME}/conf/settings.xml
:(Remarque: pour les autres, cela fonctionnait lorsqu'ils étaient configurés
${user.home}/.m2/settings.xml
. S'il n'y a pas de settings.xml dans user.home, copiez-le simplement depuis conf / dans le répertoire maven.)Puis pointez
pom.xml
pour télécharger à partir de http maven central repo:Vous devrez peut-être également configurer le proxy http dans votre IDE. Pour VSCode dans
settings.json
:Pour Win10: Démarrer / Rechercher> Paramètres du proxy réseau> Adresse de script
Sources:
la source
J'ai rencontré ce problème dans la même situation et j'ai rédigé une réponse détaillée à une question connexe sur le débordement de pile expliquant comment modifier plus facilement les cacerts du système à l'aide d'un outil GUI. Je pense que c'est un peu mieux que d'utiliser un keystore unique pour un projet spécifique ou de modifier les paramètres de maven (ce qui peut causer des problèmes plus tard).
la source
Même si je mettais les certificats dans des cacerts, j'obtenais toujours l'erreur. Tourne notre je les mettais en jre, pas en jdk / jre.
Il y a deux keystores, gardez cela à l'esprit !!!
la source
Le problème que j'ai eu est plus tôt, j'utilisais jdk 1.8.0_31 avec le certificat installé. Je suis passé à jdk 1.8.0_191 mais je n'ai pas installé de certificat.
Mais, mes projets fonctionnaient bien, j'ai réalisé que leurs dépendances étaient déjà téléchargées. Ainsi, ils ne compileraient et emballeraient que ces projets. Mais cela n'a pas fonctionné pour les nouveaux projets maven car leurs dépendances n'ont pas été téléchargées plus tôt.
Solution::
la source
Après avoir créé le keystore mentionné par @Andy. Dans Eclipse, j'ai ajouté les arguments jvm et cela a fonctionné.
la source
J'ai eu le même problème avec SSL et maven. La politique informatique de mon entreprise me limite à apporter des modifications à la configuration des ordinateurs, j'ai donc copié tout le .m2 de mon autre ordinateur et collé le dossier .m2 et cela a fonctionné.
Le dossier .m2 se trouve généralement sous c \ user \ admin
la source
Juste une autre cause: si vous ouvrez Charles, vous pourriez également rencontrer ce problème, dans ce cas, quittez simplement Charles.
la source
J'ai simplement utilisé la nouvelle version java et cela a fonctionné pour moi.
la source