- ตั้งแต่ Gradle 8.6 เป็นต้นมา ในสภาพแวดล้อม Windows จะเกิดข้อผิดพลาด 'Could not move temporary workspace...' บ่อยครั้งจนกระทั่งเกิดการ build ล้มเหลว เนื่องจากข้อขัดแย้งกับโปรแกรมป้องกันไวรัส และตอนนี้ได้รับการแก้ไขใน Gradle 9.1 RC
- ผู้ใช้ Windows จะพ้นจากปัญหา build ที่เจอกันมากว่าหนึ่งปี และเริ่มทำ Gradle build ได้อย่างปกติตั้งแต่เวอร์ชัน 9.1 (ประเด็นที่เกี่ยวข้อง: #31438)
วิธีการทำงานของเวอร์ชันก่อนหน้า
- ใช้การล็อกไฟล์แบบตรงไปตรงมาโดยการวางล็อกบนไฟล์เอง เพื่อรับประกันความคงที่ของแคช dependency แนวทางที่ง่ายและชัดเจน
วิธีการทำงานตั้งแต่เวอร์ชัน 8.6
- เพื่อปรับปรุงประสิทธิภาพ ได้นำ
CacheBasedImmutableWorkspaceProvider มาใช้ โดยสร้างไฟล์ชั่วคราวที่อิงตาม UUID และย้ายไปยังเส้นทางเฉพาะหลังงานเสร็จ
- วิธีนี้ถูกออกแบบมาเพื่อแก้ปัญหาคอขวดด้านประสิทธิภาพของการล็อกไฟล์ระหว่างการทดสอบแบบรวม
- ในสภาพแวดล้อม Windows เกิดปัญหาการย้ายไฟล์ชั่วคราวล้มเหลว เนื่องจากชนกับการเฝ้าติดตามแบบเรียลไทม์ของโปรแกรมป้องกันไวรัส (เมื่อมีการสร้างไฟล์ใหม่จะพยายามรับล็อก)
วิธีแก้ในเวอร์ชัน 9.1
- นำกลยุทธ์การล็อกแบบต่างกันตามระบบปฏิบัติการมาใช้
- สภาพแวดล้อม Windows: ใช้แนวทาง LockingStrategy.WORKSPACE_LOCK โดยสร้าง โฟลเดอร์ย่อย (\workspace) ภายในเส้นทางแคช และรับล็อกทั้งโฟลเดอร์ย่อยนี้ทั้งก้อน เพื่อป้องกันการรบกวนรายไฟล์จากโปรแกรมป้องกันไวรัส ช่วยแก้ปัญหาได้
- สภาพแวดล้อมนอก Windows: คงแนวทาง ATOMIC_MOVE (แบบเวอร์ชัน 8.6) เดิม
ยังไม่มีความคิดเห็น