从 java 客户端连接到 db2
Connecting to db2 from java client
我正在尝试从 java 客户端连接到 db2 运行 将应用程序作为 jar。该 jar 是一个超级 jar,其中包含由 shade 插件生成的所有依赖项。
当我 运行 来自我的 ide(Netbeans) 的程序时,它 运行 没问题,但是当我 运行 它来自这样的命令行时,它失败了:
java -jar target/locationImporter.jar
我得到的异常是:
Exception in thread "main" java.lang.NullPointerException
at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:216)
at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2363)
at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2278)
at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3142)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2706)
at com.ibm.as400.access.AS400.signon(AS400.java:4035)
at com.ibm.as400.access.AS400.connectService(AS400.java:1184)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3338)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1419)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1256)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:395)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dataprep.ConnectionSupplier.getConnection(ConnectionSupplier.java:18)
at dataprep.SqlFileRunner.runScript(SqlFileRunner.java:65)
at dataprep.SqlFileRunner.runSqlFile(SqlFileRunner.java:26)
at dataprep.PrepareDatabase.main(PrepareDatabase.java:26)
失败的代码是:
Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
因为它 运行 在我的 ide 中,我知道 url、用户名和密码是正确的。
我的 shade 插件在我的 pom 中是这样配置的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
<finalName>locationImporter</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>true</minimizeJar>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
经过几个小时的调试,我的一位同事为我指明了正确的方向。删除 minimizeJar
解决了问题,因为阴影插件删除了文件 "SocketContainerInet" 因为它不是直接实例化而是通过字符串值..
我正在尝试从 java 客户端连接到 db2 运行 将应用程序作为 jar。该 jar 是一个超级 jar,其中包含由 shade 插件生成的所有依赖项。
当我 运行 来自我的 ide(Netbeans) 的程序时,它 运行 没问题,但是当我 运行 它来自这样的命令行时,它失败了:
java -jar target/locationImporter.jar
我得到的异常是:
Exception in thread "main" java.lang.NullPointerException
at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:216)
at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2363)
at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2278)
at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3142)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2706)
at com.ibm.as400.access.AS400.signon(AS400.java:4035)
at com.ibm.as400.access.AS400.connectService(AS400.java:1184)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3338)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1419)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1256)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:395)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dataprep.ConnectionSupplier.getConnection(ConnectionSupplier.java:18)
at dataprep.SqlFileRunner.runScript(SqlFileRunner.java:65)
at dataprep.SqlFileRunner.runSqlFile(SqlFileRunner.java:26)
at dataprep.PrepareDatabase.main(PrepareDatabase.java:26)
失败的代码是:
Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
因为它 运行 在我的 ide 中,我知道 url、用户名和密码是正确的。
我的 shade 插件在我的 pom 中是这样配置的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
<finalName>locationImporter</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>true</minimizeJar>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
经过几个小时的调试,我的一位同事为我指明了正确的方向。删除 minimizeJar
解决了问题,因为阴影插件删除了文件 "SocketContainerInet" 因为它不是直接实例化而是通过字符串值..