Acabo de descargar Maven y estaba tratando de ejecutar el comando simple que se encuentra en la página "Maven en cinco minutos" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Este es el comando:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Cuando lo ejecuto aparece un error con el certificado SSL y no puedo descargarlo desde el repositorio central de Maven en https://repo.maven.apache.org/maven2 . El error es "SunCertPathBuilderException: no se puede encontrar la ruta de certificación válida para el objetivo solicitado".
Estoy sentado detrás de un firewall corporativo y he configurado correctamente la configuración de proxy para ambos http
y https
acceso a través del settings.xml
archivo. Dudo que todos los que descarguen Maven y lo ejecuten por primera vez tengan que importar el certificado SSL del repositorio de Maven, por lo que el problema debe estar en el proxy. ¿Alguien tiene alguna experiencia con esto?
Aquí está el seguimiento de la pila en modo de depuración completa (-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
Respuestas:
El hecho es que su complemento Maven intenta conectarse a un repositorio remoto https
(por ejemplo, https://repo.maven.apache.org/maven2/ )
¡Esta es una nueva conectividad SSL para Maven Central disponible en agosto de 2014!
Entonces, ¿puede verificar que su settings.xml tenga la configuración correcta?
Alternativamente, puede utilizar el repositorio http maven simple como este
Avíseme si mi solución funciona;)
J.
fuente
La respuesta anterior es una buena solución de trabajo, pero aquí le mostramos cómo hacerlo si desea usar el repositorio SSL:
Ahora abra un símbolo del sistema y escriba (use sus propias rutas):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore
Ahora puede ejecutar el comando nuevamente con el parámetro
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Bajo linux use ruta absoluta
-Djavax.net.ssl.trustStore=/tmp/mavenKeystore
de lo contrario esto sucederá
Me gusta esto:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Opcional:
Puede usar la
MAVEN_OPTS
variable de entorno para no tener que preocuparse nuevamente. Ver más información sobre laMAVEN_OPTS
variable aquí :fuente
sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
Actualizar
Acabo de tropezar con este informe de error:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
Parece ser la causa de nuestros problemas aquí. Algo con ca-certificados-java que encuentra un error y no llena completamente los cacerts. Para mí, esto comenzó a suceder después de actualizar a 15.10 y este error probablemente ocurrió durante ese proceso.
La solución es ejecutar el siguiente comando:
Si revisa el contenido del almacén de claves (como en mi respuesta original), ahora verá un montón más, incluida la DigiCert Global Root CA necesaria.
Si realizó el proceso en mi respuesta original, puede limpiar la clave que agregamos ejecutando este comando (suponiendo que no haya especificado un alias diferente):
Maven ahora funcionará bien.
Respuesta original
Solo me gustaría ampliar la respuesta de Andy sobre agregar el certificado y especificar un almacén de claves. Eso me ayudó a comenzar, y combinado con información en otro lugar pude entender el problema y encontrar otra solución (¿mejor?).
La respuesta de Andy especifica un nuevo almacén de claves con el certificado Maven específicamente. Aquí, voy un poco más amplio y agrego el certificado raíz al almacén de confianza predeterminado de Java. Esto me permite usar mvn (y otras cosas de Java) sin especificar un almacén de claves.
Como referencia, mi sistema operativo es Ubuntu 15.10 con Maven 3.3.3.
Básicamente, el almacén de confianza de Java predeterminado en esta configuración no confía en el certificado raíz del repositorio de Maven (DigiCert Global Root CA), por lo que debe agregarse.
Lo encontré aquí y descargué:
https://www.digicert.com/digicert-root-certificates.htm
Luego encontré la ubicación predeterminada del almacén de confianza, que reside aquí:
Puede ver qué certs hay actualmente ejecutando este comando:
Cuando se le solicite, la contraseña predeterminada del almacén de claves es "changeit" (pero nadie lo hace nunca).
En mi configuración, la huella digital de "DigiCert Global Root CA" no existía (DigiCert lo llama "huella digital" en el enlace de arriba). Así que aquí está cómo agregarlo:
Esto debería indicar si confía en el certificado, diga sí.
Use keytool -list nuevamente para verificar que la clave existe. No me molesté en especificar un alias (-alias), por lo que terminó así:
Luego pude ejecutar los comandos mvn de manera normal, sin necesidad de especificar el almacén de claves.
fuente
Puedes usar la
-Dmaven.wagon.http.ssl.insecure=true
opciónfuente
Puede importar el certificado SSL manualmente y simplemente agregarlo al almacén de claves.
Para usuarios de Linux,
Sintaxis:
Ejemplo:
fuente
Esta puede no ser la mejor solución. Cambié mi maven de 3.3.x a 3.2.x. Y este problema desapareció.
fuente
En realidad tuve el mismo problema.
cuando corro
en mi proyecto maven, recibo este error de certificado por la herramienta maven.
Seguí la respuesta de @Andy hasta el punto en que descargué el archivo .cer archivo
después de eso, el resto de la respuesta no funcionó para mí, pero hice lo siguiente (estoy ejecutando en una máquina Linux Debian)
en primer lugar, ejecuta:
por ejemplo en mi caso es:
si le pregunta sobre la contraseña, simplemente presione enter.
Se supone que este comando enumera todos los certificados SSL aceptados por Java. cuando ejecuté este comando, en mi caso obtuve 93 certificados, por ejemplo.
Ahora agregue el archivo descargado .cer al archivo cacerts ejecutando el siguiente comando:
escriba su contraseña de sudo y luego le preguntará acerca de contraseña del almacén de claves
el predeterminado es changeit
entonces di y que confía en este certificado.
si ejecutas el comando
una vez más, en mi caso, obtuve 94 contenidos de los cacerts archivo
significa que se agregó con éxito.
fuente
Una solución rápida es agregar este código en su pom.xml:
Donde nunca es para evitar la búsqueda de un certificado.
fuente
Recibía el mismo error sobre el certificado SSL cuando Maven intentó descargar los módulos necesarios automáticamente.
Como remedio, estaba intentando implementar la respuesta de Luke anterior, pero descubrí que el certificado DigiCert Global Root CA ya está en el almacén de claves de confianza de Java.
Lo que me ayudó fue agregar
%JAVA_HOME%\bin
a la variable Ruta (estoy ejecutando Windows). Y%JAVA_HOME%
es una ubicación JDK, no solo una ubicación JRE, ya que Maven necesita un JDK.No estoy seguro de por qué ayudó, pero lo hizo. Estoy absolutamente seguro de que esto fue lo único que cambié.
fuente
Si este problema ocurre para el repositorio HTTPS , por ejemplo, https://repo.spring.io/milestone , puede intentar reemplazarlo por no seguro: http://repo.spring.io/milestone . Y eso es
fuente
Paso 1: OBTENGA el contenido del Certificado del sitio web (desea que se importe como raíz confiable)
Paso 2: guarde todo (incluidas las líneas BEGIN CERTIFICATE y END CERTIFICATE, que son importantes en este caso) como godaddyg2.pem e impórtelo a mi tienda de confianza a través de:
Paso 3: importe el certificado en el almacén de claves (almacén de claves de confianza de Java)
fuente
Lo que funcionó para mí:
Configurar
<proxy>
ajustes en${MAVEN_HOME}/conf/settings.xml
:(Nota: para otros, funcionó cuando configuraron
${user.home}/.m2/settings.xml
. Si no hay settings.xml en user.home, simplemente cópielo desde conf / en el directorio maven).Luego apunte
pom.xml
a descargar desde http maven central repo:También es posible que deba configurar el proxy http en su IDE. Para VSCode en
settings.json
:Para Win10: Inicio / Búsqueda> Configuración del proxy de red> Dirección de script
Fuentes:
fuente
Me encontré con este problema en la misma situación, y escribí una respuesta detallada a una pregunta relacionada sobre el desbordamiento de la pila explicando cómo modificar más fácilmente los cacerts del sistema usando una herramienta GUI. Creo que es un poco mejor que usar un almacén de claves único para un proyecto específico o modificar la configuración de Maven (que puede causar problemas en el futuro).
fuente
Aunque estaba poniendo los certificados en cacerts, todavía recibía el error. Resulta que los estaba poniendo en jre, no en jdk / jre.
¡Hay dos tiendas de claves, tenlo en cuenta!
fuente
El problema que obtuve es antes, estaba usando jdk 1.8.0_31 con el certificado instalado. Cambié a jdk 1.8.0_191 pero no instalé el certificado.
Pero, mis proyectos funcionaban bien, me di cuenta de que sus dependencias ya estaban descargadas. Por lo tanto, solo compilarían y empaquetarían esos proyectos. Pero, esto no funcionó para nuevos proyectos maven ya que sus dependencias no se descargaron antes.
Solución::
fuente
Después de crear el almacén de claves mencionado por @Andy. En Eclipse, agregué los args jvm y funcionó.
fuente
Tuve el mismo problema con SSL y Maven. La política de TI de mi empresa me limita a realizar cambios en la configuración de las computadoras, por lo que copié todo el .m2 de mi otra computadora y lo pegué, y funcionó.
La carpeta .m2 generalmente se encuentra en c \ user \ admin
fuente
Otra causa más: si abre Charles, también podría resolver este problema, en este caso simplemente renunciar a Charles.
fuente
Simplemente utilicé la nueva versión de Java y funcionó para mí.
fuente