java - 使用 jenkins 和 maven 时出现 ClassNotFound 异常
问题描述
我需要你的帮助。我刚刚习惯了 Java,并且已经完成了我在私人项目中的第一个里程碑。现在我想利用这个里程碑作为与 Jenkins 和 CI 打交道的机会。
但是,我在 Jenkins 中通过 Maven 运行程序时遇到了问题。在处理 Jenkins 管道时,Maven 总是向我抛出 ClassNotFound 异常。但是当我在 IntelliJ 中本地启动程序时,它运行没有问题。
据我所见,他找不到我用于使用 JAXB 解析 XML 的 POJO。
为什么当我使用 Jenkins 构建时它没有找到一个类,但是当我在本地工作时找到所有东西,POM 是一样的。
这是我的POM:
<groupId>groupId</groupId>
<artifactId>rss_backend</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>dev.morphia.morphia</groupId>
<artifactId>core</artifactId>
<version>1.5.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>projects.rss_backend.MainApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
这是我在使用 jenkins/maven 时遇到的错误:
The following command runs and outputs the execution of your Java
application (which Jenkins built using Maven) to the Jenkins UI.
+ java -jar target/rss_backend-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at projects.rss_backend.MainApp.main(MainApp.java:20)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more```
您是否知道我做错了什么或如何解决问题?
解决方案
普通 jar 不包含依赖项。
您需要按照此处所述构建可执行 jar:如何使用 Maven 创建具有依赖项的可执行 JAR?
可能您并没有使用 IntelliJ 启动 jar,java -jar
而是使用了一些 IntelliJ 机制为您创造了魔法(即类路径)。
推荐阅读
- python-3.x - Errno 2. 没有这样的文件或目录。美丽的汤链接与可变变量
- python - 为什么我的硒不能在 python 脚本中工作?
- java - 发送/接收字节类型时的protobuf java问题
- django - 如何修复 Django 中的 ModuleNotFounError?
- python-3.x - 使用 Python 进行 Google Cloud Live Logging 的问题
- java - 使用带有转义字符的 Gradle 自动扩展属性
- android - 键盘出现时颤动溢出底部
- javascript - 查找没有 split() 或重正则表达式的单词数
- python - 有没有使用 Python 将值转换为 int 格式的简单方法?
- reactjs - 如何修复键盘错误隐藏反应本机