[英]Unable to get javax.mail to be found by package
我編寫了一個使用 log4j 的程序,它設置為在錯誤/致命級別使用 SMTPAppender
<SMTP name="ErrorMail" subject="iMCtoOVO ERROR" to="addresses@company.com" from="server@client.com" smtpHost="clientgateway.client.com" smtpPort="25" bufferSize="100">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</SMTP>
它在標准 Oracle Java 上運行良好,但自從切換到 OpenJDK 后,由於許可,使用 Microsoft 安裝程序安裝,我無法讓它運行。
2022-09-15 14:52:15,568 main ERROR Could not create plugin of type class org.apacche.logging.log4j.core.appender.SmtpAppender for element SMTP: java.lang.NoClassDefFoundError: javax/mail/MessagingException java.lang.NoClassDefFoundError: javax/mail/MessagingException
在 Oracle Java 下,我只能通過將 javax.mail.jar 放入“ext”文件夾中才能使其正常工作。 我現在在這個系統上找不到這樣的位置。 我嘗試將路徑放在清單類路徑中,從清單中刪除類路徑並通過 java -cp 以各種格式(例如引用,\和/絕對和相對路徑、通配符等),我已經用內置的所有必要包(Eclipse IDE)重建了可運行的 JAR,但我沒有想法。
java -cp G:\iMCAlarmParse\lib\javax.mail.jar -Dlog4j.configurationFile=file:/g:/iMCAlarmParse/conf/log4j2-dev.xml -Dimctoovo.WorkPath=g:/imcAlarmParse/ -jar iMCAlarmParse-dev.jar
我敢肯定,我在堆棧跟蹤中遺漏了一些非常愚蠢的東西,但我已經束手無策了。
供參考: openjdk 17.0.4.1 2022-08-12 LTS OpenJDK Runtime Environment Microsoft-40354 (build 17.0.4.1+1-LTS) OpenJDK 64-Bit Server VM Microsoft-40354 (build 17.0.4.1+1-LTS, mixed mode , 分享)
提前致謝。
<?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>org.example</groupId>
<artifactId>DemoAppLogs</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--
<classpathPrefix>libs/</classpathPrefix>
-->
<mainClass>
org.example.Main
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}
</outputDirectory>
<!--
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
-->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
運行mvn clean package
將您的 log4j2.xml 復制到目標
cd target
java -jar app.jar
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.8.1
Built-By: demo
Build-Jdk: 19.0.1
Class-Path: log4j-api-2.17.2.jar log4j-core-2.17.2.jar log4j-slf4j-impl-
2.17.2.jar slf4j-api-1.7.36.jar javax.mail-1.6.2.jar activation-1.1.jar
Main-Class: org.example.Main
我沒有使用 -cp 分配 jar 文件,因為我在 app.jar/META-INF/MANIFEST.MF 中設置了類路徑(pom.xml 使用 maven-jar-plugin)
我將所有依賴項 jar 放入帶有 app.jar 的目標中(pom.xml 使用 maven-dependency-plugin)
可能您正在添加過時的依賴項,請嘗試
javax.mail:javax.mail-api:1.6.2
反而。 您可以使用https://mvnrepository.com/artifact/javax.mail/javax.mail-api來獲取二進制文件,搜索不同的版本,或者嘗試切換到它的后繼者 jakarta.mail-api。 (但這需要更新軟件,因為 package 名稱已更改。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.