La clonación de JGit HTTPS no funciona

Tengo la URL de Gerit GitHub: https://mycompany.com/gerrit/p/my-services.git

Cloné a través de la terminal, está funcionando bien: git clone https://mycompany.com/gerrit/p/my-services.git

Cuando utilizo el código de java para clonar usando JGit, está arrojando un error como " UnknownHostException ",

Me pregunto cuándo clonaré en Terminal ( https://mycompany.com/gerrit/p/my-services.git ) está funcionando bien, pero cuando lo bash con JGit, ¿está arrojando un error? ¿Por qué no está reconociendo ese dominio en JGit ?

El logging de errores es

org.eclipse.jgit.api.errors.TransportException: https://mycompany.com/gerrit/p/my-services.git: cannot open git-upload-pack at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137) at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:178) at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:125) at com.test.AppTest.importGit(AppTest.java:128) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:292) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) at $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) Caused by: org.eclipse.jgit.errors.TransportException: https://mycompany.com/gerrit/p/my-services.git: cannot open git-upload-pack at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:499) at org.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:308) at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136) at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122) at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1105) at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128) ... 34 more Caused by: java.net.UnknownHostException: mycompany.com at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570) at sun.net.NetworkClient.doConnect(NetworkClient.java:158) at sun.net.www.http.HttpClient.openServer(HttpClient.java:411) at sun.net.www.http.HttpClient.openServer(HttpClient.java:525) at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:272) at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:966) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318) at org.eclipse.jgit.util.HttpSupport.response(HttpSupport.java:167) at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:462) ... 39 more 

Mi código es,

// Estoy usando el código siguiente para confiar en todas las URL de https,

// Crea un administrador de confianza que no valida las cadenas de certificates

 TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (GeneralSecurityException e) { } String url = "https://mycompany.com/gerrit/p/my-services.git"; String username = "username"; String password = "password"; String checkoutLocation = "/Users/testing"; String branch = "my-services-sample-test"; UsernamePasswordCnetworkingentialsProvider userCnetworkingential = new UsernamePasswordCnetworkingentialsProvider(username, password); Git r = Git.cloneRepository().setDirectory(new File(checkoutLocation + "/clonned")) .setCnetworkingentialsProvider(userCnetworkingential) .setURI(url) .setProgressMonitor(new TextProgressMonitor()) .setBranch(branch) .call(); System.out.println("Clonning @ " + checkoutLocation); r.getRepository().close(); 

Soy usign la dependencia

  <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>3.0.0.201306101825-r</version> <scope>compile</scope> </dependency> 

Tengo la solución. Un miembro de la comunidad de Eclipse me dio algunas ideas al respecto.

Aquí está el hilo: http://www.eclipse.org/forums/index.php/m/1176786/#msg_1176786

Necesitaba configurar la configuration del proxy para JGit, usando la class ProxySelector .

 ProxySelector.setDefault(new ProxySelector(){ final ProxySelector delegate = ProxySelector.getDefault(); @Override public List<Proxy> select(URI uri) { // Filter the URIs to be proxied if (uri.toString().contains("github") && uri.toString().contains("https")) { return Arrays.asList(new Proxy(Type.HTTP, InetSocketAddress.createUnresolved("localhost", 3128))); } if (uri.toString().contains("github") & uri.toString().contains("http")) { return Arrays.asList(new Proxy(Type.HTTP, InetSocketAddress.createUnresolved("localhost", 3129))); } // revert to the default behaviour return delegate == null ? Arrays.asList(Proxy.NO_PROXY) : delegate.select(uri); } @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { if (uri == null || sa == null || ioe == null) { throw new IllegalArgumentException("Arguments can't be null."); } } }); 

En mi caso, "localhost"/3128 y localhost"/3129 fueron HTTPS y HTTP proxy URL / Port respectivamente, que quería usar.

Ref .: configuration de proxy JGit en código

Funcionó bien