2017-08-10 416 views
0

我正在使用Intellij Idea开发环境。为了构建我的项目,我使用了连接postgres驱动程序的maven。java.lang.ClassNotFoundException:org.postgresql.Driver与Maven

<dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901-1.jdbc4</version> 
</dependency> 

当我在Intellij的想法中运行项目的一切工作。然而,当我编译罐项目,将返回以下错误:

java.lang.ClassNotFoundException: org.postgresql.Driver 

这是我的全部pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>Monitoring</groupId> 
    <artifactId>Monitoring</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>Monitor</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}</outputDirectory> 
          <overWriteReleases>false</overWriteReleases> 
          <overWriteSnapshots>true</overWriteSnapshots> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 


    <dependencies> 
     <dependency> 
      <groupId>org.asteriskjava</groupId> 
      <artifactId>asterisk-java</artifactId> 
      <version>1.0.0-final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.25</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.8.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.rabbitmq</groupId> 
      <artifactId>amqp-client</artifactId> 
      <version>4.2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901-1.jdbc4</version> 
     </dependency> 
    </dependencies> 
</project> 

怎么可能解决这一问题?

+1

你如何执行你的JAR?当你执行JAR时,你是否将所有的依赖关系添加到类路径中? –

+0

java -jar Monitoring.jar。我不确定如何检查这个问题? –

+1

[我如何使用Maven创建具有依赖项的可执行JAR?](https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using -maven) – krokodilko

回答

0

与您pom.xml以下应该工作

  1. 创建应用程序

    mvn package 
    
  2. 运行应用程序

    cd target/ 
    java -jar Monitoring-1.0-SNAPSHOT.jar 
    

假设Monitor.java

public class Monitor { 
    public static void main(String[] args) throws Exception { 
     Class.forName("org.postgresql.Driver"); 
     System.out.println("Hello driver"); 
    } 
} 

在上面的步骤将打印

Hello driver 

target/*.jar运行应用程序的所有jar文件必须在同一目录中Monitoring-1.0-SNAPSHOT.jar

+0

非常感谢!那么为什么从Intellij的想法构建出来并不成功? –

+0

@ОлегКорытников取决于你做了什么。 'Build - > Build Project'只编译类。要构建这个包,你需要执行Maven目标'package'(意味着'mvn package')。要在IntelliJ中执行相同的操作,请执行'View - > Tools Windows - > Maven Projects',然后选择Monitoring - > Lifecycle - > package'并执行它。然后所有的罐子都会在'target /'中。 – SubOptimal