2015-11-04 4 views
0

Я пытаюсь создать файл .jar на своем сервере (CentOS), используя Maven. Он успешно компилирует и генерирует файл .jar. Но когда я его выполню, он показывает следующую ошибку. Эти вопросы могут выглядеть как «ранее заданные», но я попробовал все предложения отсюда. Я верю, что в моем POM.xml есть некоторые проблемы, но я не могу их найти. Если кто-то может проверить POM.xml, это было бы полезно.java.lang.ClassNotFoundException: com.mysql.jdbc.Driver для Maven runnable jar

Команда:

$ java -jar target/ListDescCrawler-1.1-SNAPSHOT.jar 

Ошибка:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

Мои pom.xml

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>edu.uci.ics.crawler4j</groupId> 
    <artifactId>ListDescCrawler</artifactId> 
    <packaging>jar</packaging> 
    <version>1.1-SNAPSHOT</version> 
    <name>SanListDescCrawlerHandu</name> 
    <url>http://maven.apache.org</url> 
    <build> 
     <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target>    
      </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>edu.uci.ics.crawler4j.example.MainController</mainClass>       
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
     </pluginManagement> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.james</groupId> 
     <artifactId>apache-mime4j-core</artifactId> 
     <version>0.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.james</groupId> 
     <artifactId>apache-mime4j-dom</artifactId> 
     <version>0.7</version> 
    </dependency> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>de.l3s.boilerpipe</groupId> 
     <artifactId>boilerpipe</artifactId> 
     <version>1.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-compress</artifactId> 
     <version>1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>fluent-hc</artifactId> 
     <version>4.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-stax-api_1.0_spec</artifactId> 
     <version>1.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpcore</artifactId> 
     <version>4.3.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpmime</artifactId> 
     <version>4.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sleepycat</groupId> 
     <artifactId>je</artifactId> 
     <version>4.0.92</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jsoup</groupId> 
     <artifactId>jsoup</artifactId> 
     <version>1.8.1</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>com.drewnoakes</groupId> 
     <artifactId>metadata-extractor</artifactId> 
     <version>2.4.0-beta-1</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.34</version> 
    </dependency> 
    <dependency> 
     <groupId>org.ccil.cowan.tagsoup</groupId> 
     <artifactId>tagsoup</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tika</groupId> 
     <artifactId>tika-app</artifactId> 
     <version>1.6</version> 
    </dependency> 
    </dependencies> 
</project> 

MANIFEST.MF файл в генерируемый файл .jar:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Built-By: root 
Build-Jdk: 1.7.0_91 
Main-Class: edu.uci.ics.crawler4j.example.MainController 
Class-Path: apache-mime4j-core-0.7.jar apache-mime4j-dom-0.7.jar asm-3 
.1.jar boilerpipe-1.1.0.jar commons-codec-1.6.jar commons-compress-1. 
3.jar commons-logging-1.1.3.jar fluent-hc-4.3.6.jar geronimo-stax-api 
_1.0_spec-1.0.1.jar httpclient-4.3.6.jar httpcore-4.3.3.jar httpmime- 
4.3.6.jar je-4.0.92.jar jsoup-1.8.1.jar log4j-1.2.17.jar metadata-ext 
ractor-2.4.0-beta-1.jar tagsoup-1.2.1.jar tika-app-1.6.jar tika-parse 
rs-1.6.jar tika-core-1.6.jar vorbis-java-tika-0.6.jar netcdf-4.2.20.j 
ar unidataCommon-4.2.20.jar jcip-annotations-1.0.jar commons-httpclie 
nt-3.1.jar jmatio-1.0.jar xz-1.5.jar pdfbox-1.8.6.jar fontbox-1.8.6.j 
ar jempbox-1.8.6.jar bcmail-jdk15-1.45.jar bcprov-jdk15-1.45.jar poi- 
3.11-beta2.jar poi-scratchpad-3.11-beta2.jar poi-ooxml-3.11-beta2.jar 
    poi-ooxml-schemas-3.11-beta2.jar xmlbeans-2.6.0.jar asm-debug-all-4. 
1.jar isoparser-1.0.2.jar aspectjrt-1.8.0.jar rome-1.0.jar jdom-1.0.j 
ar vorbis-java-core-0.6.jar juniversalchardet-1.0.3.jar jhighlight-1. 
0.jar java-libpst-0.8.1.jar tika-serialization-1.6.jar tika-xmp-1.6.j 
ar xmpcore-5.1.2.jar slf4j-log4j12-1.5.6.jar slf4j-api-1.5.6.jar gson 
-1.7.1.jar 

Команды выполняется:

mvn clean compile 
mvn clean package 
java -jar target/ListDescCrawler-1.1-SNAPSHOT.jar 

Есть много библиотечных файлов добавляются в проект, включая MySQL-разъем-Java-5.1.34.jar. Но все же ошибка показывается. Я проверил в SOF решение и попробовал много предложений отсюда, но ничего не исправил мою проблему.

Я проверил MANIFEST.MF в сгенерированном файле .jar, и все выглядит нормально.

Другие, чтобы отметить это, его работает отлично от Затмения (без Maven)

есть какая-то ошибка в моем pom.xml?

Предложения Я попробовал:

  1. зависимость/сфера Я попробовал все возможные значения

  2. Скопировано MySQL-разъем-Java-5.1.34.jar в Lib папки и изменить POM .xml соответственно

и может предложить другие предложения, но ничего не помогло.

Наконец все начали работать со следующим pom.xml

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>edu.uci.ics.crawler4j</groupId> 
    <artifactId>ListDescCrawler</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>SanListDescCrawlerHandu</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <jdk.version>1.7</jdk.version>  
     <junit.version>4.11</junit.version> 
     <apache-mime4j-core.version>0.7</apache-mime4j-core.version> 
     <apache-mime4j-dom.version>0.7</apache-mime4j-dom.version> 
     <asm.version>3.1</asm.version> 
     <boilerpipe.version>1.1.0</boilerpipe.version> 
     <commons-codec.version>1.6</commons-codec.version> 
     <commons-compress.version>1.3</commons-compress.version> 
     <commons-logging.version>1.1.3</commons-logging.version> 
     <fluent-hc.version>4.3.6</fluent-hc.version> 
     <geronimo-stax-api_1.0_spec.version>1.0.1</geronimo-stax-api_1.0_spec.version> 
     <httpclient.version>4.3.6</httpclient.version> 
     <httpcore.version>4.3.3</httpcore.version> 
     <httpmime.version>4.3.6</httpmime.version> 
     <je.version>4.0.92</je.version> 
     <jsoup.version>1.8.1</jsoup.version> 
     <log4j.version>1.2.17</log4j.version> 
     <metadata-extractor.version>2.4.0-beta-1</metadata-extractor.version> 
     <mysql-connector-java.version>5.1.34</mysql-connector-java.version> 
     <tagsoup.version>1.2.1</tagsoup.version> 
     <tika-app.version>1.6</tika-app.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.james</groupId> 
      <artifactId>apache-mime4j-core</artifactId> 
      <version>${apache-mime4j-core.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.james</groupId> 
      <artifactId>apache-mime4j-dom</artifactId> 
      <version>${apache-mime4j-dom.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>asm</groupId> 
      <artifactId>asm</artifactId> 
      <version>${asm.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>de.l3s.boilerpipe</groupId> 
      <artifactId>boilerpipe</artifactId> 
      <version>${boilerpipe.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-codec</groupId> 
      <artifactId>commons-codec</artifactId> 
      <version>${commons-codec.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-compress</artifactId> 
      <version>${commons-compress.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>${commons-logging.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>fluent-hc</artifactId> 
      <version>${fluent-hc.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.geronimo.specs</groupId> 
      <artifactId>geronimo-stax-api_1.0_spec</artifactId> 
      <version>${geronimo-stax-api_1.0_spec.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>${httpclient.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpcore</artifactId> 
      <version>${httpcore.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpmime</artifactId> 
      <version>${httpmime.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sleepycat</groupId> 
      <artifactId>je</artifactId> 
      <version>${je.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>${jsoup.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.drewnoakes</groupId> 
      <artifactId>metadata-extractor</artifactId> 
      <version>${metadata-extractor.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>${mysql-connector-java.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.ccil.cowan.tagsoup</groupId> 
      <artifactId>tagsoup</artifactId> 
      <version>${tagsoup.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tika</groupId> 
      <artifactId>tika-app</artifactId> 
      <version>${tika-app.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>ListDescCrawler</finalName> 
     <plugins> 

      <!-- download source code in Eclipse, best practice --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>false</downloadJavadocs> 
       </configuration> 
      </plugin>   

      <!-- Set a compiler level --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>${jdk.version}</source> 
        <target>${jdk.version}</target> 
       </configuration> 
      </plugin> 

      <!-- Maven Assembly Plugin --> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
        <mainClass>edu.uci.ics.crawler4j.example.MainController</mainClass> 
        </manifest> 
       </archive> 
       </configuration> 
       <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
        <goal>single</goal> 
        </goals> 
       </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 

</project> 
+0

Не могли бы вы включить 'MANIFEST.MF' в ваш вопрос? –

+2

Файл jar не содержит зависимостей вашего проекта ... – khmarbaise

+0

@khmarbaise, я не понял вашу точку зрения. – San

ответ

2

Eventhough ваш класс путь в MANIFEST.MF содержит банку, что вы зависимы это не означает, что они на самом деле на вашем пути к классам при запуске ваш проект. У вас есть два варианта: либо поместить все зависящие баночки в один и тот же каталог вашего исполняемого банку, либо создать затененную банку.

Затененная (жирная) баня содержит все ваши зависимости. Вы можете создать затененную банку, используя maven. Вот пример.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <finalName>${project.build.finalName}-with-dependencies</finalName> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass> edu.uci.ics.crawler4j.example.MainController </mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

Мне нужно заменить 'maven-jar-plugin'' maven-shade-plugin'? где я должен предоставить узел 'mainClass'?в команде 'mvn' какие изменения мне нужно сделать? – San

+0

Doc here: https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html –

+0

@San Я обновил свой ответ для основного класса. Вы можете проверить детали https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html – bhdrkn