2014-06-06 76 views
0

我使用maven創建了一個java項目,並且也構建了一個可執行jar文件。在我的課堂上,我定義了以下內容。運行使用maven構建的可執行jar的錯誤

Public class Main{ 
     public static void main(String[] args) { 

     System.setProperty("javax.net.ssl.trustStore", keypath); 
     System.setProperty("javax.net.ssl.trustStorePassword", pwd); 
      .... 
     //do a https request 

     } 
} 

當我使用的jar -java xx.jar我收到以下錯誤

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 

我進口的需要使用maven的依賴,插件項目中的所有其他庫運行可執行的JAR。我是否也必須導入jdk庫。如果是的話哪些。有沒有什麼不同的方法

謝謝

UPDATE

以下是堆棧跟蹤

org.apache.amber.oauth2.common.exception.OAuthSystemException: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 
at org.apache.amber.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:102) 
at org.apache.amber.oauth2.client.OAuthClient.accessToken(OAuthClient.java:64) 
at org.apache.amber.oauth2.client.OAuthClient.accessToken(OAuthClient.java:54) 
at org.apache.amber.oauth2.client.OAuthClient.accessToken(OAuthClient.java:70) 
at ........ 
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179) 
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:186) 
at sun.net.www.protocol.https.HttpsClient.createSocket(HttpsClient.java:362) 
at sun.net.NetworkClient.doConnect(NetworkClient.java:145) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) 
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:916) 
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158) 
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1019) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230) 
at org.apache.amber.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:79) 
... 8 more 
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 
at java.security.Provider$Service.newInstance(Provider.java:1245) 
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220) 
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147) 
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125) 
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68) 
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102) 
at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:325) 
at javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:283) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.<init>(HttpsURLConnectionImpl.java:65) 
at sun.net.www.protocol.https.Handler.openConnection(Handler.java:42) 
at sun.net.www.protocol.https.Handler.openConnection(Handler.java:37) 
at java.net.URL.openConnection(URL.java:945) 
at org.apache.amber.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:64) 
... 8 more 
Caused by: java.io.IOException: Invalid keystore format 
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38) 
at java.security.KeyStore.load(KeyStore.java:1185) 
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:150) 
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at java.security.Provider$Service.newInstance(Provider.java:1221) 
... 20 more 

密鑰存儲在.jks格式。

+1

使用Java的罐子xx.jar還粘貼完整的堆棧跟蹤 – Kick

+1

我認爲你可以在IDE中沒有錯誤執行程序和您要正確調試可執行的JAR行爲運行jar? – Eypros

+0

@Eypros你是對的。當我在eclipse中使用它時沒有問題(不需要構建jar等,只需運行主類)。當我在命令行上運行它時,會發生這種情況。 –

回答

0

我找到了問題的解決方案。當我檢查輸出包(在Maven構建之後)和原始.jks文件中的.jks文件的大小時,存在大小差異。沒有關於過濾的想法,我已經在maven-resource-plugin中應用了過濾。去除它後,罐子工作。

 <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/resources/</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <!--<filtering>true</filtering>--> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
相關問題