gpt4 book ai didi

java - 将 postgresql 驱动程序与 Maven 结合使用

转载 作者:行者123 更新时间:2023-12-01 11:08:12 32 4
gpt4 key购买 nike

我尝试在 Maven 中使用以下依赖项:

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1200-jdbc4</version>
</dependency>

当我在 main 方法中使用此驱动程序时,它可以工作,但是当我安装模块并尝试运行 .jar 文件时,会发生 ClassNotFoundException。我该怎么办?

我在运行时通过 Class.forName("org.postgresql.Driver") 调用驱动程序。我尝试更改运行时依赖范围,但没有帮助。

我的堆栈跟踪:

java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at dbchecker.CountDBChecker.openConnection(CountDBChecker.java:149)
at dbchecker.CountDBChecker.main(CountDBChecker.java:165)
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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

我通过命令 java -jar 以及 iPOJO 中使用了该 jar(如 this 教程中)。

我解决了通过 maven- assembly-plugin 执行 jar 的问题,但我还有另一个与 iPOJO 有关的问题。该 jar 不是由 iPOJO 执行的,并且 list 文件中的某些指令似乎丢失了。以前的 list :

Manifest-Version: 1.0
Export-Package: dbchecker;uses:="common,checker.service";version="1.0.
0"
iPOJO-Components: instance { $component="dbchecker.CountDBChecker" }co
mponent { $name="dbchecker.CountDBChecker" $classname="dbchecker.Coun
tDBChecker" provides { }manipulation { $classname="dbchecker.CountDBC
hecker" interface { $name="checker.service.CheckerService" }field { $
name="connection" $type="java.sql.Connection" }field { $name="dateCol
umn" $type="java.lang.String" }field { $name="dateFrom" $type="java.l
ang.String" }field { $name="dateTo" $type="java.lang.String" }field {
$name="interval" $type="long" }field { $name="maxRequired" $type="lo
ng" }field { $name="minRequired" $type="long" }field { $name="report"
$type="common.Report" }field { $name="send" $type="boolean" }field {
$name="table" $type="java.lang.String" }field { $name="zdegeokodowan
o" $type="common.Zdegeokodowano" }field { $name="zdegeokodowanoColumn
" $type="java.lang.String" }method { $name="$init" }method { $name="g
etInterval" $return="long" }method { $name="check" $return="common.Re
port" }method { $name="buildCountQuery" $return="java.lang.String" }m
ethod { $name="executeCountQuery" $return="long" $arguments="{java.la
ng.String}" $names="{query}" }method { $name="setMessage" $return="ja
va.lang.String" $arguments="{long,java.lang.String}" $names="{result}
" }method { $name="setErrorMessage" $return="java.lang.String" $argum
ents="{long,java.lang.String,long,boolean}" $names="{result,query,req
uired}" }method { $name="reportErrorMessage" $arguments="{long,java.l
ang.String,long,boolean}" $names="{result,query,required}" }method {
$name="openConnection" $return="java.sql.Connection" }}}
Bundle-Version: 1.0.0
Built-By: mk
Build-Jdk: 1.7.0_79
Tool: Bnd-1.50.0
Bundle-Name: countDBChecker
Bnd-LastModified: 1442913271587
Created-By: Apache Maven Bundle Plugin & iPOJO 1.12.1
Bundle-ManifestVersion: 2
Import-Package: org.osgi.service.log;version=1.3, common;version="[1.0
,2)", org.apache.felix.ipojo.architecture;version="[1.12.1,2.0.0)", c
hecker.service;version="[1.0,2)", org.apache.felix.ipojo;version="[1.
12.1,2.0.0)", org.osgi.service.cm;version=1.2
Bundle-SymbolicName: supervisor.countDBChecker

最近 list :

Manifest-Version: 1.0
Created-By: 24.79-b02 (Oracle Corporation)
Archiver-Version: Plexus Archiver

我应该更改 pom.xml 中的执行目标吗?这是 pom(部分):

            <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>install</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

最佳答案

您的 JAR 似乎不包含 PostgreSQL JDBC 驱动程序类。只需在运行应用程序时指定 JAR 的类路径,例如:

java -cp postgres-jdbc.jar:myApp.jar mypackage.MyMainClass

或者使用maven-assembly-plugin构建独立的 JAR,包括 PostgreSQL 依赖项。

关于java - 将 postgresql 驱动程序与 Maven 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32697144/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com