Maven surefire ไม่พบคลาส ForkedBooter


218

เมื่อเร็ว ๆ นี้เข้ามาในโครงการใหม่ฉันพยายามรวบรวมซอร์สโค้ดของเรา ทุกอย่างทำงานได้ดีเมื่อวานนี้ แต่วันนี้เป็นอีกเรื่องหนึ่ง

ทุกครั้งที่ฉันใช้mvn clean installโมดูลเมื่อถึงการทดสอบมันจะเกิดข้อผิดพลาด:

[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ recorder ---
[INFO] Surefire report directory: /lhome/code/recorder/target/surefire-reports
[INFO] Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider
[INFO] parallel='none', perCoreThreadCount=true, threadCount=0, useUnlimitedThreads=false, threadCountSuites=0,     threadCountClasses=0, threadCountMethods=0, parallelOptimized=true

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

และหลังจากนั้น:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project recorder: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?

ฉันทำงานบนDebian 9 (ยืด) 64 บิตกับ OpenJDK 1.8.0_181, Maven 3.5.4 ทำงานอยู่เบื้องหลังพร็อกซี่ บริษัท ~/.m2/settings.xmlของเราซึ่งเรากำหนดค่าในของฉัน

สิ่งที่แปลกที่ Surefire เวอร์ชั่นล่าสุดคือ 2.22.1 ถ้าฉันจำได้ถูกต้อง ฉันพยายามระบุรุ่นปลั๊กอิน แต่ไม่ได้รับการอัปเดตมิฉะนั้นจะไม่มีข้อกำหนดรุ่นปลั๊กอินในPOMใด ๆ(หลักพาเรนต์แกรนด์พาเรนต์หรืออันนี้)

ฉันพยายามบังคับให้ Maven เปลี่ยนเวอร์ชั่น Surefire ไปเป็นเวอร์ชั่นล่าสุด แต่ตอนนี้มันยิ่งแย่กว่านี้:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[...]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project recorder:     There are test failures.
[ERROR]
[ERROR] Please refer to /lhome/code/recorder/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /lhome/code/recorder/ && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye.     VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /lhome/code/recorder/ && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183)
[ERROR]     at     org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857)
[ERROR]     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR]     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR]     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR]     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:954)
[ERROR]     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR]     at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
[ERROR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]     at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

1
ฉันมีข้อผิดพลาดนี้ใน clircle-ci Surefire forks และ forked vm พิมพ์ข้อความต่อไปนี้และออก: "ข้อผิดพลาด: ไม่สามารถค้นหาหรือโหลดคลาสหลักของ org.apache.maven.surefire.booter.ForkedBooter" การนวดอยู่ในเป้าหมาย / surefire-reports / *. dumpstream หากคุณเรียกใช้ maven ด้วย -X จะพิมพ์บรรทัดคำสั่งคุณสามารถลองและดู vm พิมพ์ข้อความนี้
Bruno Coutinho


ทางออกของฉันคือหยุดใช้ open-jdks ทุกรุ่น ไม่สามารถให้ความเชื่อถือได้แบบนี้ในบางสิ่งที่เป็นพื้นฐาน
Adrian M.

ใช้dependencyManagementส่วนของ maven เพื่อระบุปลั๊กอินเวอร์ชันต่าง ๆ
jogaco

การอัพเดตเป็น jdk 11 บน Debian เป็นวิธีการแก้ปัญหาสำหรับฉัน!
Clearlight

คำตอบ:


251

หากต้องการแก้ไข (ในปี 2018) ให้อัปเดต openjdk ของคุณเป็นเวอร์ชันล่าสุดอย่างน้อย 8u191-b12 ในกรณีที่ปัญหานี้ปรากฏขึ้นอีกครั้งในปี 2020 มีแนวโน้มว่าพฤติกรรมเริ่มต้นของ openjdk นั้นเปลี่ยนไปจากนั้นคุณจะต้องอัปเดตปลั๊กอิน maven surefire

นี่เป็นข้อผิดพลาดคงที่ ในขณะนี้ในแพ็คเกจ openjdk-8 (พฤติกรรมเบี่ยงเบนไปจากต้นน้ำอย่างมีนัยสำคัญโดยไม่จำเป็นต้องใช้ขาด patch upstream เพื่อเปลี่ยนกลับเป็นการปิดการตรวจสอบความปลอดภัย) ที่คุณเพิ่งอัพเกรด แต่มันก็เป็นข้อผิดพลาดในปลั๊กอิน surefire, SUREFIRE-1588 , ได้รับการแก้ไขใน surefire 3.0.0-M1 : ดูเหมือนว่าจะใช้เส้นทางที่แน่นอนในสถานที่ที่ Java จะมีในอนาคตอนุญาตเฉพาะชื่อพา ธ สัมพัทธ์ (และเดเบียนเปิดใช้งาน พฤติกรรมในอนาคตแล้ว)

สถานะแพคเกจเวอร์ชัน 8u181-b13-2:

  • ใช้แพตช์จากการอัพเดทความปลอดภัย 8u191-b12

โปรดสังเกตว่า 191-b12! = 181-b13 แพตช์รักษาความปลอดภัย 191-b12 เพิ่งออกมาเมื่อไม่กี่วันที่ผ่านมาและเห็นได้ชัดว่าผู้ดูแลระบบต้องการที่จะนำพวกเขามาให้คุณอย่างรวดเร็ว การอัปเดตอย่างสมบูรณ์เป็น 191-b12 อาจต้องมีการทดสอบเพิ่มเติม (เช่นกันดังนั้นควรมีการอัปโหลดนี้อย่างชัดเจน)

มีการแก้ไขหลายครั้ง:

  1. คุณสามารถติดตั้งแพ็คเกจก่อนหน้าจาก snapshots.do แทน หลังจากที่ปรับลดคุณสามารถห้ามรุ่นเสีย (ถ้าคุณกำลังใช้ความถนัดและไม่ได้apt) sudo aptitude forbid-version openjdk-8-jre-headlessโดยใช้ สำหรับ "apt" ปกติฉันไม่เห็นกลไกการห้ามที่คล้ายกันดังนั้นคุณอาจต้องใช้ apt pinning เพื่อป้องกันไม่ให้ติดตั้งการอัปเกรดนี้อีกครั้ง (หรือคุณเพิ่งปรับลดรุ่นอีกครั้ง
  2. จากการติดตามบั๊กการตั้งค่าคุณสมบัติ-Djdk.net.URLClassPath.disableClassPathURLCheck=trueด้วยวิธีใด ๆ ตามปกติ (เช่นJAVA_FLAGS) ควรช่วยด้วย แต่ฉันยังไม่ได้ยืนยันตัวเอง เห็นได้ชัดว่าคุณสามารถเพิ่มวิธีแก้ปัญหาเพื่อ~/.m2/settings.xmlเปิดใช้งานสำหรับ Maven ทั้งหมดที่คุณสร้างได้อย่างง่ายดาย

อย่างที่คุณเห็นการติดตามข้อผิดพลาดปัญหาถูก จำกัด ลงและมีแพคเกจคงที่พร้อมใช้งานและปลั๊กอิน surefire เวอร์ชันใหม่จะมาเร็ว ๆ นี้!


@AdrianMadaras ฉันไม่ได้รับการอัปเดตใหม่จนถึงตอนนี้มีเพียงรุ่น -2 นอกจากนี้ยังไม่มีการประกาศการอัปโหลดคงที่ แต่กำลังดำเนินการอยู่ คุณอาจเพิ่งอัปเกรดเป็นเวอร์ชันที่เป็นปัญหาที่ทราบแล้ว
Erich Schubert

1
ฉันเพิ่งได้รับปัญหาเดียวกันบน Ubuntu 18.04 โดยใช้ OpenJDK 10.0.2 การสลับ JAVA_HOME เป็น 'java-9-oracle' ของฉันติดตั้งแก้ไข
RobAu

2
นี่คือปัญหาที่เกี่ยวข้องในตัวติดตามปัญหา surefire-maven-plugin: problems.apache.org/jira/browse/SUREFIRE-1588 (ยังคงเป็นข้อบกพร่องใน backport Canonical / Debian ของการเปลี่ยนแปลง OpenJDK ที่เกี่ยวข้อง)
mirabilos

1
วิธีแก้ปัญหา 1. ไม่สมเหตุสมผลสำหรับฉันเนื่องจากเป็นรุ่นที่ฉันกำลังประสบปัญหาอยู่ เอาชนะ Maven-แหง-ปลั๊กอินไม่ useSystemClassLoader ยังไม่ได้ทำงาน
เอ็ดวินดิแอซเม็นเดส

1
คุณสามารถลองอัปเกรดเป็น surefire 3.0.0-M1 ได้เช่นกัน แต่แน่นอนว่ารุ่น 2 ถึง 3 เหตุการณ์สำคัญสามารถทำลายสิ่งอื่น ๆ ได้
Erich Schubert

54

ตั้ง useSystemClassloader เป็น false:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>

หากคุณไม่ได้สืบทอดจากพาเรนต์ซึ่งมีรุ่นที่กำหนดไว้สำหรับคุณ (เช่นสปริงบู๊ตสตาร์ทเตอร์) คุณจะต้องกำหนดสิ่งนั้นด้วย


การเปิดใช้งาน classloader ของระบบเป็นวิธีปฏิบัติที่แย่ที่สุดเนื่องจากคุณใช้การทดสอบในกระบวนการปลั๊กอิน วิธีปฏิบัติที่ถูกต้องคือการอัพเกรดเวอร์ชันของปลั๊กอินทุกตัว Maven 3.7.0 จะอัปเกรดปลั๊กอินทั้งหมดซึ่งเป็นของวงจรชีวิตเริ่มต้น สปริงไม่ควรยึดติดกับเวอร์ชันเก่าและไม่ควรแทนที่ด้วย ทำให้เกิดความขัดแย้งในความรับผิดชอบที่ไม่จำเป็น
tibor17

52

ฉันพบวิธีแก้ปัญหานี้และแก้ไขการทดสอบของฉัน: กำหนดค่าmaven-surefire-pluginไม่ให้ใช้ classloader ของระบบ


ตามผู้ดูแล maven-surefire-plugin การแก้ปัญหาทั้งหมด (สิ่งนี้การตั้งค่าforkCountเป็น 0 หรือการตั้งค่าargLineทั่วโลก) มีปัญหาและไม่สามารถใช้ได้ในระดับสากล
mirabilos

หาดี แต่โปรดรวมข้อความวิธีแก้ปัญหาจริงในโพสต์ของคุณหรืออย่างน้อยก็ระบุลิงค์อย่างชัดเจนว่าเป็นสแต็กโอเวอร์โฟลว์ลิงก์ เช่นแนวทางที่ใช้โดย @markoorn มีประโยชน์มากกว่า
nealmcb

38

ฉันมีวิธีแก้ปัญหาอื่น ตั้งค่าตัวแปรสภาพแวดล้อม _JAVA_OPTIONS ฉันเคยใช้สิ่งนี้สำหรับตัวแทนสร้าง TeamCity ของเราและตอนนี้งานสร้างของเราทำงานได้ดี

_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true

โดยทั่วไปแล้วจะไม่มีการเปิดตัวการเปลี่ยนแปลงที่มีข้อความระบุว่าเป็นโปรแกรมแก้ไขด้านความปลอดภัยโดยไม่มีเหตุผลและเพื่อให้มีคนบอกวิธีการปิดการใช้งานดังนั้นเพียงแค่บอกว่า
berezovskyi

26

ผมโพสต์ที่แตกต่างกันตรงเป้าหมายมากขึ้นของหนึ่งในการแก้ไขปัญหาดังกล่าวข้างต้นใน JIRA เพิ่มไปที่~/.m2/settings.xml:

<profile>
    <id>SUREFIRE-1588</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
    </properties>
</profile>

สิ่งนี้ล้มเหลวด้วยคำเตือนต่อไปนี้:[WARNING] Expected root element 'settings' but found 'profile' (position: START_TAG seen <profile>... @1:9) @ /home/nikolai/.m2/settings.xml, line 1, column 9
Nikolai

3
@Nikolai <settings><profiles>...</profiles></settings>ข้อมูลโค้ดข้างต้นจะต้องมีการปิดล้อม
qqx

13

ฉันมีปัญหานี้ในงานสร้าง GitLab CI ซึ่งใช้maven:3.5.4-jdk-8อิมเมจ Docker

การเปลี่ยนเพื่อmaven:3.5.4-jdk-8-alpineแก้ไขปัญหา


8

ฉันติดตามลิงค์นี้https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.htmlและเพิ่มปลั๊กอินด้านล่างใน pom.xml และทำงานได้

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
        <configuration>
          <useSystemClassLoader>false</useSystemClassLoader>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

8

เมื่อใช้ GitLab CI / CD กับ3.6.0-jdk-8ภาพเฉพาะคุณสมบัติด้านล่างที่ได้รับการช่วยเหลือ (โดยไม่ต้องแก้ไขpom.xml)

-Dsurefire.useSystemClassLoader=false

นี่เป็นการปฏิบัติที่ไม่ดีอีกครั้ง ด้านขวาคือการอัพเกรดรุ่น ตรวจสอบเวอร์ชั่นในMaven Centralทุกครั้ง
tibor17

5

เพื่อการค้นหาเหล่านั้นสำหรับคำตอบที่เกี่ยวข้องกับการเทียบท่า Maven: 3.5.x-jdk-8 ใน GitLab CI, ดูปัญหา GitHub นี้

มันปรากฏขึ้น 3.5.4-jdk-8ภาพส่งผลให้อัพเกรดเป็นเวอร์ชั่น Java เล็กน้อยซึ่งมีผลต่อกลไกการตีของ Surefire

ย้อนกลับไปที่3.5.3-jdk-8รูปภาพได้แก้ไขสิ่งนี้สำหรับฉันบนเซิร์ฟเวอร์ GitLab CI ของฉันซึ่งสร้างโค้ด Java 1.8 ด้วย Surefire 2.20.1


5

คำแนะนำด้านบนเพื่อตั้งค่าคุณสมบัติ"-Djdk.net.URLClassPath.disableClassPathURLCheck = true"ไม่ทำงานสำหรับฉัน แต่การตั้งค่าต่อไปนี้ใช้งานได้:

-DforkCount=0

2
สิ่งนี้มีผลต่อการไม่สร้าง VM ใหม่สำหรับการรันการทดสอบดังนั้นการทดสอบอาจมีผลต่อการสร้าง VM หลัก
Paŭlo Ebermann

4

สำหรับ Ubuntu: ติดตั้งเวอร์ชันล่าสุดแก้ไขข้อผิดพลาดนี้

sudo apt-get update ; sudo apt-get dist-upgrade -y

ติดตั้งเวอร์ชันการทำงานล่าสุด (ไม่มีแพตช์รักษาความปลอดภัย) โดยไม่มีข้อบกพร่อง

sudo apt-get install openjdk-8-jdk-headless=8u181-b13-1 openjdk-8-jdk=8u181-b13-1  openjdk-8-jre=8u181-b13-1  openjdk-8-jre-headless=8u181-b13-1 openjdk-8-source=8u181-b13-1

หากคุณพลาดรุ่นนั้นให้ใช้รุ่นก่อนหน้า:

sudo apt-get install openjdk-8-jdk-headless=8u162-b12-1 openjdk-8-jdk=8u162-b12-1  openjdk-8-jre=8u162-b12-1  openjdk-8-jre-headless=8u162-b12-1 openjdk-8-source=8u162-b12-1

จากนั้นใช้การปักหมุดหรือระวังว่าคุณจะไม่ติดตั้งรุ่นที่ใช้งานไม่ได้

การใช้-Djdk.net.URLClassPath.disableClassPathURLCheck=trueไม่ได้ผลสำหรับฉันทุกที่ที่ฉันตั้งค่าไว้ ที่ไหนสักแห่งในการทดสอบการรวมระบบของฉันมันมักจะออกโดยไม่มีรุ่น Java เก่า

ดังกล่าวโดยริชมันเป็นข้อผิดพลาดในแพคเกจ Debian เป็นเข้มงวดเกินไป911,925และไม่ Surefire ปลั๊กอินทำหน้าที่ตามกฎระเบียบใหม่surefire-1588


ทำไมทุกคนแนะนำให้ติดตั้งรุ่นที่ไม่มีโปรแกรมแก้ไขด้านความปลอดภัย! แม้ว่าข้อเสนอแนะอื่น ๆ นั้นรวมถึงการทดสอบข้าม
berezovskyi

1
คุณไม่จำเป็นต้อง :-) อีกต่อไปมันได้รับการแก้ไขแล้ว แต่ในขณะเดียวกันฉันก็มีโปรเจ็กต์จาวามากมายที่ฉันต้องทำงานและรันไทม์ของจาวาก็ไม่พบกับโค้ดใหม่จากภายนอก ดังนั้นจึงมีความเสี่ยงที่สามารถควบคุมได้ซึ่งก็โอเคสำหรับฉัน มันเป็นการตัดสินใจของทุกคนหลังจากทั้งหมด :-)
flob

ที่จริงแล้วคุณพูดถูกฉันพบว่า JDK devs เดินกลับไปที่เสาที่ตั้งไว้ตามค่าเริ่มต้น: hg.openjdk.java.net/jdk/jdk/rev/f54dcfc5a5f8 ; แต่การอัปเกรดเวอร์ชันหลักเป็น surefire ดูเหมือนว่าจะไม่เป็นการแก้ไขที่ดีที่สุดสำหรับฉันจริงๆ
berezovskyi

1
แน่นอน! แต่การเปลี่ยนแปลงที่พวกเขาต้องทำมีทั้งรหัสเบสทั้งหมดและมีการบุกรุกที่รุนแรง ดังนั้นการเปลี่ยนแปลงรุ่นรองสำหรับการแก้ไขนี้จะไม่เป็นตัวเลือกใน surefire
flob

1
และน่าเสียดายที่ 2.x ถูกยกเลิกและเราจะต้องทำการสลับโดยเร็วกว่าในภายหลัง: problems.apache.org/jira/browse/…
berezovskyi

2

ฉันเพิ่มการพึ่งพา Junit-jupiter-engine และมันใช้งานได้

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.4.0</version>
        </dependency>
    </dependencies>
</plugin>

ดาวพฤหัสบดี - ปลั๊กอินนี้ใช้เวทมนตร์อะไรได้บ้าง? สิ่งนี้ได้ผลสำหรับฉัน! Upvote! :-)
Hinotori

1

ฉันเพิ่งตั้งค่างาน maven ในเจนกินส์และติดอยู่ในปัญหาเดียวกัน ฉันได้รับคำแนะนำเพื่อแก้ไขตัวแปร env JAVA และยืนยันปัญหาที่แก้ไขได้ นี่คือวิธีที่ฉันทดสอบ

เป็นผู้ใช้ "jenkins" และเปลี่ยนโฟลเดอร์เป็นชื่อโครงการเวิร์กสเปซที่คุณตั้งค่าสำหรับงาน

 $ _JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean install -U

 $ lsb_release -rd
 Description:   Ubuntu 16.04.5 LTS
 Release:   16.04

 $ mvn -v
 Apache Maven 3.3.9
 Maven home: /usr/share/maven
 Java version: 1.8.0_181, vendor: Oracle Corporation
 Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
 Default locale: en_US, platform encoding: UTF-8
 OS name: "linux", version: "4.4.0-131-generic", arch: "amd64", family: "unix"

1

การเพิ่มสิ่งนี้เข้ากับ maven-surefire-plugin ฉันแก้ไขปัญหา:

    <plugin>    
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId>  
        <configuration>
            <forkCount>0</forkCount>
        </configuration>
    </plugin>

1

โดยทั่วไปจะไม่เข้ากันระหว่างรุ่น JDK และรุ่นปลั๊กอิน maven-surefire ในกรณีของฉัน JDK 11.0.5 ไม่ทำงานกับ surefire 3.0.0-M4 ฉันต้องเปลี่ยนเป็น 3.0.0-M3 และใช้งานได้ การตั้งค่า forkCount เป็น 0 ไม่สามารถแก้ไขปัญหาได้เพราะจะทำให้รายงานของ Jacoco แตก


0

ฉันถอนการติดตั้ง JDK ที่มาในที่เก็บ:

$ sudo apt purge openjdk-8-jdk

$ sudo apt autoremove

จากนั้นฉันก็ลบJAVA_HOMEตัวแปรสภาพแวดล้อม ฉันตั้งอยู่ใน. bashrc ของฉัน

จากนั้นฉันติดตั้งใหม่ผ่าน SDKMAN:

$ sdk install java 8.0.181-zulu

จากเว็บไซต์ของพวกเขา:

SDKMAN! เป็นเครื่องมือสำหรับการจัดการซอฟต์แวร์การพัฒนาหลายชุดแบบขนานบนระบบปฏิบัติการยูนิกซ์ส่วนใหญ่ มันมี Command Line Interface (CLI) และ API ที่สะดวกสำหรับการติดตั้ง, เปลี่ยน, ลบและแสดงรายชื่อผู้สมัคร

หากต้องการดู JDK รุ่นอื่นที่จะติดตั้งให้ใช้:

$ sdk list java

0

ฉันกำลังเผชิญปัญหาเดียวกันกับ gitlab ci การเปลี่ยนภาพ maven จากmaven:3-jdk-8เป็นmaven:3.6.0-jdk-8-alpineดูเหมือนจะแก้ไขปัญหาได้ แต่ฉันก็ทดสอบด้วยmaven:3.6.0-jdk-8แต่ก็ไม่ได้ผล


0

ก็ยังคงเป็นปัญหาสำหรับกับsurefire - v2.22.2 maven:3.6-jdk-8-alpineเพื่อแก้ไขปัญหาเพิ่มรหัสด้านล่างเพื่อpom.xml(เป็นปลั๊กอิน maven)

...
<plugin>    
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId>  
    <configuration>
        <forkCount>0</forkCount>
    </configuration>
</plugin>
...

-1

ถ้าอย่างฉันคุณมีปัญหาในการส่งของคุณ (สำหรับฉันมันอยู่ใน GitLab แต่ไม่ว่าอะไรก็ตาม) และถ้าคุณใช้อิมเมจ Maven JDK 8 Docker

คุณสามารถแทนที่

image: maven:3.5.4-jdk-8

โดยงานสร้างล่าสุด

image: maven@sha256:b37da91062d450f3c11c619187f0207bbb497fc89d265a46bbc6dc5f17c02a2b

1
ปัญหามาจาก jdk8 ล่าสุดสำหรับเดเบียนในความคิดของฉันมันจะดีกว่าที่จะ "แก้ไข" ปัญหาหลักมากกว่าที่จะพยายามแก้ไขมัน
Sylordis

sha256 ฟังดูยุ่งยากและกลัวคุณเหรอ? ที่จริงแล้วคำตอบอื่น ๆ ดูเหมือนจะเป็นมากกว่าการทำงานปิดการใช้งานคุณลักษณะบางอย่างจาก surefire ที่นี่มันเป็นเพียงเกี่ยวกับการใช้ภาพนักเทียบท่าทำงานล่าสุดโดยไม่ต้องเปลี่ยน pom ทำงานหรือท่อของคุณซึ่งเป็นงาน
amdev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.