java.lang.Ошибка NoClassDefFoundError: java /sql/Дата

#java #maven #jenkins

#java #maven #дженкинс

Вопрос:

Я пытаюсь создать плагин Jenkins с помощью mvn hpi:run in docker, но запуск Jenkins завершается неудачно java.lang.NoClassDefFoundError: java/sql/Date .

Maven внутри контейнера docker установлен в версии 3.6.0:

 $ mvn -v
Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 11.0.7, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "5.4.0-56-generic", arch: "amd64", family: "unix"
 

Полная команда, которую я вызываю:

 mvn -Dmaven.javadoc.skip=true 
    -Dmaven.test.skip=true 
    -Dfindbugs.skip=true 
    -Denforcer.skip=true 
    -Danimal.sniffer.skip=true hpi:run
 

но запуск Jenkins завершается неудачно со следующей ошибкой:

 Dec 10, 2020 8:04:16 AM jenkins.model.Jenkins <clinit>
SEVERE: Failed to load Jenkins.class
java.lang.NoClassDefFoundError: java/sql/Date

... Some stacktrace output

[INFO] Started ServerConnector@61874f5d{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
[INFO] Jetty server exiting.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.154 s
[INFO] Finished at: 2020-12-10T08:04:16Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.jenkins-ci.tools:maven-hpi-plugin:2.2:run (default-cli) on 
project <myproject>: Execution default-cli of goal org.jenkins-ci.tools:maven-hpi-plugin:2.2:run
failed: A required class was missing while executing org.jenkins-ci.tools:maven-hpi-
plugin:2.2:run: java/sql/Date

... 
 

Как мне справиться с этой ошибкой?


Примечание: сборка самого плагина работает. Вызов следующей команды приводит к созданию пакета .hpi, который можно развернуть на уже запущенной установке Jenkins, загрузив его.

 mvn  -Dmaven.javadoc.skip=true 
     -Dmaven.test.skip=true 
     -Dfindbugs.skip=true 
     -Denforcer.skip=true 
     -Danimal.sniffer.skip=true package  # 'mvn verify' also works
 

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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.jenkins-ci.plugins</groupId>
        <artifactId>plugin</artifactId>
        <version>3.4</version>
        <relativePath />
    </parent>

    <properties>
        <revision>0.1</revision>
        <changelist></changelist>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <java.level>8</java.level>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <argLine>-Dfile.encoding=${project.build.sourceEncoding}</argLine>
        <jenkins.version>2.204.1</jenkins.version>
        <no-test-jar>false</no-test-jar>
        <useBeta>true</useBeta>
        <linkXRef>false</linkXRef>
        <configuration-as-code.version>1.36</configuration-as-code.version>
        <slf4jVersion>1.7.26</slf4jVersion>
        <spotbugs.failOnError>false</spotbugs.failOnError>
    </properties>

    <build>
      <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource><!-- copy all Java source files as resources -->
                <directory>src/main/java</directory>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>repo.jenkins-ci.org</id>
            <url>https://repo.jenkins-ci.org/public/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
        <groupId>org.kohsuke.metainf-services</groupId>
        <artifactId>metainf-services</artifactId>
        <version>1.1</version>
        </dependency>
        <dependency>
        <groupId>org.jenkins-ci.plugins</groupId>
        <artifactId>credentials</artifactId>
        <version>2.3.12</version>
        </dependency> 
        <dependency>
        <groupId>org.jenkins-ci.plugins</groupId>
        <artifactId>ssh-credentials</artifactId>
        <version>1.18.1</version>
        </dependency> 
        <dependency>
        <groupId>org.jenkins-ci.plugins</groupId>
        <artifactId>git-client</artifactId>
        <version>3.3.1</version>
        </dependency> 
        <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
        <dependency>
            <groupId>io.jenkins.tools.bom</groupId>
            <artifactId>bom-2.204.x</artifactId>
            <version>11</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        </dependencies>
    </dependencyManagement>

    <scm>
        <connection>scm:git:git://github.com/jenkinsci/${project.artifactId}-plugin.git</connection>
        <developerConnection>scm:git:git@github.com:jenkinsci/${project.artifactId}-plugin.git</developerConnection>
        <url>https://github.com/jenkinsci/${project.artifactId}-plugin</url>
        <tag>${scmTag}</tag>
    </scm>

    <pluginRepositories>
        <pluginRepository>
        <id>repo.jenkins-ci.org</id>
        <url>https://repo.jenkins-ci.org/public/</url>
        </pluginRepository>
    </pluginRepositories>
    
</project>
 

Комментарии:

1. Сначала я вижу, что вы используете очень старую версию плагина hpi подробнее см.: jenkins.io/doc/developer/plugin-development/updating-parent

2. Вероятно pom.xml было бы неплохо для справки

3. @Alex Я добавил pom.xml на мой вопрос.