简体   繁体   English

运行使用Maven构建的可执行jar时出错

[英]Error in running executable jar built using maven

I created a java project using maven and built a executable jar file as well. 我使用maven创建了一个Java项目,还构建了一个可执行的jar文件。 In my class I have defined following. 在我的课堂上,我定义了以下内容。

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

      } 
}

When I run the executable jar using jar -java xx.jar I get the following error 当我使用jar -java xx.jar运行可执行jar时,出现以下错误

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

I imported all other libraries that needed to the project using maven-dependency-plugin. 我使用maven-dependency-plugin导入了项目所需的所有其他库。 do I have to import jdk libraries as well. 我还必须导入jdk库。 if so which ones. 如果是这样的话。 Is there any different method 有没有其他方法

Thank you 谢谢

UPDATE 更新

following is the stack trace 以下是堆栈跟踪

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

the keystore is in .jks format. 密钥库为.jks格式。

I found the solution for the problem. 我找到了解决问题的方法。 when I check the size of the .jks file in the output bundle (after maven build) and the original .jks file, there was a size difference. 当我检查输出包中的.jks文件的大小(在maven构建之后)和原始.jks文件时,存在大小差异。 Without having an idea about filtering , I had applied filtering in the maven-resource-plugin. 没有过滤的想法,我已经在maven-resource-plugin中应用了过滤。 After removing it, the jar worked. 取出后,罐子工作了。

      <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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM