เมื่อไม่กี่วันที่ผ่านมาฉันได้พบกับคำถามเดียวกันเช่นเดียวกับคุณ รหัสทั้งหมดทำงานได้ดีบนเครื่องของฉัน แต่กลับกลายเป็นข้อผิดพลาด (ไม่มีคลาสและเริ่มต้น) ดังนั้นฉันโพสต์วิธีแก้ปัญหาของฉัน แต่ฉันไม่รู้ว่าทำไมฉันเพียงเพิ่มโอกาส ฉันหวังว่าบางคนรู้ว่าจะอธิบายสิ่งนี้ @ John Vint ก่อนอื่นฉันจะแสดงปัญหาให้ฉัน รหัสของฉันมีทั้งสแตติกตัวแปรและสแตติกบล็อก เมื่อฉันพบปัญหานี้ครั้งแรกฉันลองใช้วิธีแก้ปัญหาของ John Vint และพยายามตรวจสอบข้อยกเว้น อย่างไรก็ตามฉันไม่เห็นอะไรเลย ดังนั้นฉันคิดว่ามันเป็นเพราะตัวแปรคงที่ (แต่ตอนนี้ฉันรู้ว่าพวกเขาเป็นสิ่งเดียวกัน) และยังไม่พบอะไรเลย ดังนั้นฉันพยายามค้นหาความแตกต่างระหว่างเครื่อง linux และคอมพิวเตอร์ของฉัน จากนั้นฉันก็พบว่าปัญหานี้เกิดขึ้นเมื่อหลายเธรดทำงานในกระบวนการเดียว (โดยวิธีการที่เครื่องลินุกซ์มีแกนคู่และกระบวนการสองครั้ง) นั่นหมายความว่าหากมีสองงาน (ทั้งสองใช้รหัสที่มีบล็อกแบบคงที่หรือตัวแปร) ทำงานในกระบวนการเดียวกันมันจะผิดพลาด แต่ถ้าพวกเขาทำงานในกระบวนการที่แตกต่างกันทั้งสองคนก็โอเค ในเครื่อง Linux ฉันใช้
mvn -U clean test -Dtest=path
เพื่อเรียกใช้งานและเนื่องจากตัวแปรสแตติกของฉันคือการเริ่มต้นคอนเทนเนอร์ (หรือคุณอาจเริ่มต้น classloader ใหม่) ดังนั้นมันจะยังคงอยู่จนกระทั่ง jvm หยุดและ jvm หยุดเมื่องานทั้งหมดในกระบวนการเดียวหยุด ทุกงานจะเริ่มคอนเทนเนอร์ใหม่ (หรือ classloader) และทำให้ jvm สับสน เป็นผลให้เกิดข้อผิดพลาด ดังนั้นวิธีการแก้มันได้อย่างไร ทางออกของฉันคือการเพิ่มคำสั่งใหม่ไปยังคำสั่ง maven และทำให้ทุกงานไปที่ภาชนะเดียวกัน
-Dxxx.version=xxxxx #sorry can't post more
บางทีคุณอาจแก้ไขปัญหานี้ได้แล้ว แต่ก็ยังหวังว่าจะช่วยคนอื่นที่พบปัญหาเดียวกัน