Baru-baru ini datang ke proyek baru, saya mencoba untuk mengkompilasi kode sumber kami. Semuanya bekerja dengan baik kemarin, tetapi hari ini adalah cerita lain.
Setiap kali saya menjalankan mvn clean install
modul, setelah mencapai tes, itu menabrak kesalahan:
[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
dan selanjutnya:
[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?
Saya menggunakan Debian 9 (Stretch) 64-bit dengan OpenJDK 1.8.0_181, Maven 3.5.4, bekerja di belakang proksi perusahaan saya yang saya konfigurasi di komputer saya ~/.m2/settings.xml
.
Suatu hal yang aneh bahwa versi Surefire terbaru adalah 2.22.1 jika saya ingat dengan benar. Saya mencoba menentukan versi plugin, tetapi tidak diperbarui, jika tidak, tidak ada spesifikasi versi plugin dalam POM (orang tua, kakek-nenek atau yang ini).
Saya berhasil memaksa Maven untuk mengubah versi Surefire ke yang terbaru, tetapi sekarang lebih buruk lagi:
[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)
sumber
dependencyManagement
bagian pakar untuk menentukan versi berbeda dari pluginJawaban:
Untuk memperbaikinya (pada 2018), perbarui openjdk Anda ke versi terbaru, setidaknya 8u191-b12. Jika masalah ini muncul kembali pada tahun 2020, kemungkinan perilaku default openjdk telah berubah, dan Anda kemudian perlu memperbarui plugin maven surefire.
Ini adalah bug yang sekarang diperbaiki dalam paket openjdk-8 (perilaku menyimpang dari hulu secara signifikan tanpa perlu; melewatkan patch hulu untuk kembali ke menonaktifkan pemeriksaan keamanan) yang baru saja Anda tingkatkan. Tetapi juga sebuah bug dalam jitu Plugin, ayal-1588 , seharusnya tetap di jitu 3.0.0-M1 : itu tampaknya menggunakan path absolut di tempat di mana Java akan di masa depan hanya memungkinkan nama path relatif (dan Debian mengaktifkan perilaku masa depan sudah).
Versi paket 8u181-b13-2 menyatakan:
Perhatikan bahwa 191-b12! = 181-b13. Patch keamanan 191-b12 baru saja keluar beberapa hari yang lalu, dan tampaknya pengelola ingin membuat Anda cepat. Memutakhirkan sepenuhnya ke 191-b12 kemungkinan akan membutuhkan pengujian tambahan (ya, tampaknya unggahan ini seharusnya sudah tersedia).
Ada beberapa workaounds:
apt
) menggunakansudo aptitude forbid-version openjdk-8-jre-headless
. Untuk "apt" reguler, saya tidak melihat mekanisme larangan serupa, jadi Anda mungkin perlu menggunakan apt pinning untuk mencegah pemutakhiran ini diinstal ulang (atau Anda hanya perlu menurunkan versi lagi, saya harap ini akan segera teratasi).-Djdk.net.URLClassPath.disableClassPathURLCheck=true
dengan metode biasa (misalnya,JAVA_FLAGS
) juga harus membantu. Tapi saya belum memverifikasi ini sendiri. Anda bahkan dapat menambahkan solusi untuk~/.m2/settings.xml
mengaktifkannya untuk semua build Maven Anda dengan mudah.Seperti yang Anda lihat, pelacakan bug berfungsi , masalahnya dipersempit, dan paket tetap tersedia dan versi baru dari plugin jitu akan segera hadir!
sumber
Setel useSystemClassloader ke false:
Jika Anda tidak mewarisi dari orangtua yang memiliki versi yang ditentukan untuk Anda (seperti starter Spring Boot), Anda juga harus mendefinisikannya.
sumber
Saya menemukan solusi ini dan memperbaiki pengujian saya: konfigurasikan
maven-surefire-plugin
untuk tidak menggunakan classloader sistem.sumber
forkCount
ke 0, atau pengaturanargLine
secara global) memiliki masalah dan tidak dapat diterapkan secara universal.Saya punya solusi lain. Setel variabel lingkungan _JAVA_OPTIONS. Saya telah menggunakan ini untuk agen build TeamCity kami dan sekarang build kami berjalan dengan baik.
sumber
Saya memposting varian yang lebih bertarget dari salah satu solusi di atas di JIRA . Tambahkan ke
~/.m2/settings.xml
:sumber
[WARNING] Expected root element 'settings' but found 'profile' (position: START_TAG seen <profile>... @1:9) @ /home/nikolai/.m2/settings.xml, line 1, column 9
<settings><profiles>...</profiles></settings>
.Saya mengalami masalah ini di build GitLab CI saya, yang menggunakan
maven:3.5.4-jdk-8
gambar Docker.Mengubahnya untuk
maven:3.5.4-jdk-8-alpine
memperbaiki masalah.sumber
Saya mengikuti tautan ini https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html dan menambahkan plugin di bawah ini di pom.xml dan berhasil,
sumber
Saat menggunakan GitLab CI / CD dengan
3.6.0-jdk-8
gambar hanya properti di bawah ini yang membantu (tanpa memodifikasipom.xml
).sumber
Bagi mereka yang mencari jawaban yang terkait dengan Docker Maven: 3.5.x-jdk-8 di GitLab CI, lihat masalah GitHub ini .
Tampaknya
3.5.4-jdk-8
gambar menghasilkan peningkatan ke versi Java kecil yang entah bagaimana mempengaruhi mekanisme forking Surefire.Bergulir kembali ke
3.5.3-jdk-8
gambar memperbaiki ini untuk saya di server GitLab CI saya membangun kode Java 1.8 dengan Surefire 2.20.1.sumber
Saran di atas untuk mengatur properti "-Djdk.net.URLClassPath.disableClassPathURLCheck = true" TIDAK bekerja untuk saya, tetapi pengaturan berikut ini tidak berfungsi OK:
sumber
Untuk Ubuntu: Instal versi terbaru, bug ini diperbaiki
Instal versi kerja terakhir (tanpa tambalan keamanan) tanpa bug.
Jika Anda melewatkan versi itu, gunakan versi sebelumnya:
Kemudian gunakan penjepit atau hati-hati agar Anda tidak menginstal versi yang rusak.
Menggunakan
-Djdk.net.URLClassPath.disableClassPathURLCheck=true
tidak berfungsi untuk saya di mana pun saya meletakkan konfigurasi itu. Di suatu tempat dalam tes integrasi saya selalu keluar tanpa versi Java lama.Seperti disebutkan oleh Erich itu adalah bug dalam paket Debian yang terlalu ketat 911925 dan plugin Surefire tidak bertindak sesuai dengan aturan baru SUREFIRE-1588 .
sumber
Saya telah menambahkan ketergantungan pada mesin junit-jupiter, dan itu berhasil.
sumber
Saya baru-baru ini mengatur pekerjaan pakar pada Jenkins dan terjebak dalam masalah yang sama. Saya mengambil saran untuk memodifikasi variabel env JAVA dan mengkonfirmasi masalah terselesaikan. Beginilah cara saya menguji.
Menjadi "jenkins" pengguna dan mengubah folder untuk nama proyek workspace yang Anda siapkan untuk pekerjaan itu.
sumber
Menambahkan ini ke plugin maven-surefire-plugin saya memecahkan masalah:
sumber
Pada dasarnya adalah ketidakcocokan antara versi JDK dan versi plugin maven-surefire, dalam kasus saya, JDK 11.0.5 tidak bekerja dengan ayal 3.0.0-M4, saya harus beralih ke 3.0.0-M3 dan berhasil. menetapkan forkCount ke 0 tidak memperbaiki masalah karena merusak laporan Jacoco.
sumber
Saya mencopot JDK yang disertakan dalam repositori:
Kemudian saya menghapus
JAVA_HOME
variabel lingkungan. Milik saya diatur dalam .bashrc saya.Lalu saya menginstal ulang melalui SDKMAN:
Dari situs mereka :
Untuk melihat versi JDK lainnya untuk diinstal, gunakan:
sumber
Saya menghadapi masalah yang sama dengan gitlab ci, mengubah gambar pakar dari
maven:3-jdk-8
menjadimaven:3.6.0-jdk-8-alpine
untuk memperbaiki masalah. Btw saya juga diuji denganmaven:3.6.0-jdk-8
tetapi tidak berhasil juga.sumber
Ini masih menjadi masalah bagi
surefire - v2.22.2
denganmaven:3.6-jdk-8-alpine
. Untuk memperbaiki masalah ini, tambahkan kode di bawah ini kepom.xml
(sebagai plugin pakar)sumber
Jika seperti saya, Anda memiliki masalah dalam saluran pipa Anda (bagi saya itu ada di GitLab, tapi apa pun) dan jika Anda menggunakan gambar Docker Maven JDK 8.
Anda bisa mengganti
oleh build kerja terakhir
sumber