ClassNotFoundException:org.apache.log4j.Logger

pip*_*kou 6 java jar maven

我对 Maven 有疑问。我写了一个java代码,它在我的想法中运行。然后我使用 mvn package 来构建一个 jar。仍然没有问题。但由于某些原因,我不明白当我尝试执行 maven 创建的 jar 时出现此错误:

\n\n
 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger\n    at infra.Main.main(Main.java:53)\nCaused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger\n    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)\n    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)\n    at java.security.AccessController.doPrivileged(Native Method)\n    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)\n    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)\n    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人可以帮助像我这样的新手吗?

\n\n

下面是java代码的开头:

\n\n
package infra;\n\nimport org.apache.log4j.Logger;\nimport org.json.simple.JSONArray;\nimport org.json.simple.JSONObject;\nimport org.json.simple.parser.JSONParser;\n\nimport javax.net.ssl.HttpsURLConnection;\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.TrustManager;\nimport javax.net.ssl.X509TrustManager;\nimport java.io.*;\nimport java.net.InetSocketAddress;\nimport java.net.Proxy;\nimport java.net.URL;\nimport java.security.GeneralSecurityException;\nimport java.security.cert.X509Certificate;\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.Scanner;\n\npublic class Main {\n\n    private static String companyName = "lolilol";\n\n    private static String baseUrl = "https://" + companyName + ".inspirecloud.net";\n\n    private static String loginApi =  "/api/publish/Users/Login";\n\n    private static String loginUrl =  baseUrl + loginApi;\n\n    private static String fetchBatchesApi = "/api/query/Messenger/ListBatchesQueryByUploadTime";\n\n    private static String fetchBatchesUrl = baseUrl + fetchBatchesApi;\n\n    private static String detailBatcheApi = "/api/query/Messenger/ReportQuery";\n\n    private static String detailBatcheUrl = baseUrl + detailBatcheApi;\n\n    private static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.local.fr", 8080));\n\n    private static int nbEssais = 4;\n\n    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";\n\n     private static Logger logger = Logger.getLogger(Main.class);\n\n    public static void main(String[] args) {\n\n\n        logger.info("D\xc3\xa9but des logs");\n\n        HttpsURLConnection loginCon = null;\n        HttpsURLConnection fetchBatchCon = null;\n        HttpsURLConnection detailBatchCon;\n\n        FileOutputStream fos = null;\n        Scanner ficIn = null;\n\n        int retry;\n\n        String email;\n        String password;\n        String type;\n        String from;\n        String to;\n\n\n        String cookie = null;\n        String lineIn;\n        String[] params;\n        ArrayList<String> messagesMail = new ArrayList<String>();\n\n\n        // Create a trust manager that does not validate certificate chains\n        TrustManager[] trustAllCerts = new TrustManager[] {\n                new X509TrustManager() {\n                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {\n                        return new X509Certificate[0];\n                    }\n                    public void checkClientTrusted(\n                            java.security.cert.X509Certificate[] certs, String authType) {\n                    }\n                    public void checkServerTrusted(\n                            java.security.cert.X509Certificate[] certs, String authType) {\n                    }\n                }\n        };\n\n        try\n        {\n            SSLContext sc = SSLContext.getInstance("SSL");\n\n            sc.init(null, trustAllCerts, new java.security.SecureRandom());\n            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());\n        } catch (GeneralSecurityException e) {\n            logger.error("Probl\xc3\xa8me s\xc3\xa9curit\xc3\xa9");\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后这是 POM.xml :

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0"\n         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n<modelVersion>4.0.0</modelVersion>\n\n<groupId>trackingGMC</groupId>\n<artifactId>TrackingGMC</artifactId>\n<version>1.0-SNAPSHOT</version>\n\n<build>\n    <plugins>\n        <plugin>\n            <groupId>org.apache.maven.plugins</groupId>\n            <artifactId>maven-jar-plugin</artifactId>\n            <configuration>\n                <archive>\n                    <manifest>\n                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>\n                        <addClasspath>true</addClasspath>\n                        <classpathPrefix>lib/</classpathPrefix>\n                        <mainClass>infra.Main</mainClass>\n                    </manifest>\n                </archive>\n            </configuration>\n        </plugin>\n    </plugins>\n</build>\n\n\n<dependencies>\n    <dependency>\n        <groupId>com.googlecode.json-simple</groupId>\n        <artifactId>json-simple</artifactId>\n        <version>1.1.1</version>\n    </dependency>\n    <dependency>\n        <groupId>log4j</groupId>\n        <artifactId>log4j</artifactId>\n        <version>1.2.17</version>\n    </dependency>\n</dependencies>\n\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您需要更多信息,请随时询问。谢谢大家。

\n

Dav*_*tti 1

您必须将感兴趣的依赖项包含在您的 jar 中。查看此Inclusion dependency in a jar with Maven或此How can I create anexecutable JAR with dependency using Maven?