A Language with No Name Conflicts: Java 1.0 (ภาษาที่ไม่มีการชนกันของชื่อ: Java 1.0)
ผู้ออกแบบ Java ยุคแรกมีประสบการณ์อย่างมากกับปัญหาการชนกันของชื่อ (name conflict) ซึ่งพบได้ทั่วไปในแพลตฟอร์มโปรแกรมมิ่งสมัยนั้น Java 1.0 ใช้เทคนิคที่ชาญฉลาดเพื่อหลีกเลี่ยงความกำกวมเมื่อสองคลาสมีชื่อเดียวกัน—เช่น หาก domain ของปัญหามีทั้ง catalog order และ installation order ซึ่งทั้งคู่ชื่อ order เหมือนกันแต่ความหมาย (และคลาส) ต่างกันมาก ทางออกของผู้ออกแบบ Java คือการสร้างกลไก namespace แบบ package พร้อมกับข้อกำหนดที่ว่าโครงสร้างไดเรกทอรีจริงต้องตรงกับชื่อ package เนื่องจาก filesystem จะไม่ยอมให้ไฟล์สองไฟล์ที่มีชื่อเดียวกันอยู่ในไดเรกทอรีเดียวกัน วิธีนี้จึงอาศัยฟีเจอร์ที่มีอยู่แล้วของระบบปฏิบัติการมาช่วยป้องกันความกำกวมและการชนกันของชื่อ ด้วยเหตุนี้ classpath ดั้งเดิมใน Java จึงมีแค่ไดเรกทอรีเท่านั้น
อย่างไรก็ตาม ผู้ออกแบบภาษาพบในภายหลังว่าการบังคับให้ทุกโปรเจกต์ต้องมีโครงสร้างไดเรกทอรีที่สมบูรณ์นั้นยุ่งยาก โดยเฉพาะเมื่อโปรเจกต์ใหญ่ขึ้น นอกจากนี้การสร้าง asset ที่นำไปใช้ซ้ำได้ก็ยากด้วย เพราะ framework และ library ต้องถูก “แกะ” (exploded) ออกมาเป็นโครงสร้างไดเรกทอรี ในการออก Java เวอร์ชันหลักครั้งที่สอง (1.2 แต่เรียกว่า Java 2) ผู้ออกแบบได้เพิ่มกลไก jar ซึ่งทำให้ไฟล์ archive ทำหน้าที่เป็นโครงสร้างไดเรกทอรีบน classpath ได้ ตลอดทศวรรษถัดมา นักพัฒนา Java ต้องดิ้นรนกับการตั้งค่า classpath ให้ถูกต้องเป๊ะ ๆ ซึ่งเป็นการผสมผสานระหว่างไดเรกทอรีและไฟล์ JAR เจตนาดั้งเดิมถูกทำลายลง เพราะตอนนี้ไฟล์ JAR สองไฟล์ สามารถ ทำให้ชื่อชนกันบน classpath ได้ นี่คือเหตุผลที่นักพัฒนา Java ยุคนั้นมักมีเรื่องเล่าขานมากมายเกี่ยวกับการ debug class loader