2017-10-19 67 views
1

我有一個問題與maven。我寫了一個運行在我的想法中的java代碼。然後我使用mvn包來構建一個jar。仍然沒有問題。ClassNotFoundException:org.apache.log4j.Logger

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger 
    at infra.Main.main(Main.java:53) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger 
    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) 

有人能幫助新手和我一樣:但薩姆的原因,當我嘗試執行的jar的maven創建我有這樣的錯誤,我不明白?

下面是Java代碼的開頭:

package infra; 

import org.apache.log4j.Logger; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 

import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.X509TrustManager; 
import java.io.*; 
import java.net.InetSocketAddress; 
import java.net.Proxy; 
import java.net.URL; 
import java.security.GeneralSecurityException; 
import java.security.cert.X509Certificate; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Scanner; 

public class Main { 

    private static String companyName = "lolilol"; 

    private static String baseUrl = "https://" + companyName + ".inspirecloud.net"; 

    private static String loginApi = "/api/publish/Users/Login"; 

    private static String loginUrl = baseUrl + loginApi; 

    private static String fetchBatchesApi = "/api/query/Messenger/ListBatchesQueryByUploadTime"; 

    private static String fetchBatchesUrl = baseUrl + fetchBatchesApi; 

    private static String detailBatcheApi = "/api/query/Messenger/ReportQuery"; 

    private static String detailBatcheUrl = baseUrl + detailBatcheApi; 

    private static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.local.fr", 8080)); 

    private static int nbEssais = 4; 

    private static String header = "nbClic;Email;Id;Name;Customer;CompanyName;LastUploadTime;Type;MessageType;EmailId;ToEmailAdr;SendindState;Delivered;DeliveryError;FirstView;LastView;ViewCount;Unsubscribe;ServiceUsed;CustomerId;UrlLandingPage;GMC1;GMC2;GMC3;GMC4;GMC5;\n"; 

    private static Logger logger = Logger.getLogger(Main.class); 

    public static void main(String[] args) { 


     logger.info("Début des logs"); 

     HttpsURLConnection loginCon = null; 
     HttpsURLConnection fetchBatchCon = null; 
     HttpsURLConnection detailBatchCon; 

     FileOutputStream fos = null; 
     Scanner ficIn = null; 

     int retry; 

     String email; 
     String password; 
     String type; 
     String from; 
     String to; 


     String cookie = null; 
     String lineIn; 
     String[] params; 
     ArrayList<String> messagesMail = new ArrayList<String>(); 


     // Create a trust manager that does not validate certificate chains 
     TrustManager[] trustAllCerts = new TrustManager[] { 
       new X509TrustManager() { 
        public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
         return new X509Certificate[0]; 
        } 
        public void checkClientTrusted(
          java.security.cert.X509Certificate[] certs, String authType) { 
        } 
        public void checkServerTrusted(
          java.security.cert.X509Certificate[] certs, String authType) { 
        } 
       } 
     }; 

     try 
     { 
      SSLContext sc = SSLContext.getInstance("SSL"); 

      sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
     } catch (GeneralSecurityException e) { 
      logger.error("Problème sécurité"); 
     } 

然後這裏是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>trackingGMC</groupId> 
<artifactId>TrackingGMC</artifactId> 
<version>1.0-SNAPSHOT</version> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>infra.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 


<dependencies> 
    <dependency> 
     <groupId>com.googlecode.json-simple</groupId> 
     <artifactId>json-simple</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
</dependencies> 

</project> 

如果您需要更多的信息可以隨意問。謝謝大家。

+0

你怎麼_execute_你的罐子,你指定的類路徑運行時你的庫? – epoch

+0

我試圖用兩種不同的方式來執行jar。首先,我只需雙擊它,但沒有發生。然後我在bat文件中使用命令java -jar nameofmyjar.jar – pipouloukou

回答

0

所以我試着瞭解你發給我的鏈接DurdenP。但似乎我錯過了我的反思:)。 我修改我的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>trackingGMC</groupId> 
<artifactId>TrackingGMC</artifactId> 
<version>1.0-SNAPSHOT</version> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
         <addClasspath>true</addClasspath> 
         <mainClass>infra.Main</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 


<dependencies> 
    <dependency> 
     <groupId>com.googlecode.json-simple</groupId> 
     <artifactId>json-simple</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
</dependencies> 

</project> 

然後我試圖執行的罐子,我得到這個新的錯誤:

Exception in thread "main" java.lang.UnsupportedClassVersionError: infra/Main (Unsupported major 
.minor version 49.0) 
     at java.lang.ClassLoader.defineClass0(Native Method) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$100(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
+0

沒關係,現在我只需更改我的Java版本。謝謝所有 – pipouloukou

+0

樂意提供幫助。如果我的回答或任何其他人解決了您的問題,請將其標記爲已接受:stackoverflow.com/help/someone-answers –