ความแตกต่างระหว่างการกำหนดค่าคอมไพล์และรันไทม์ใน Gradle


102

คำถามของฉันเป็นเรื่องธรรมดาเล็กน้อย แต่ก็เชื่อมโยงกับ Gradle ด้วย

ทำไมเราต้องคอมไพล์และการกำหนดค่ารันไทม์?

เมื่อฉันรวบรวมบางสิ่งฉันต้องการสิ่งประดิษฐ์เพื่อแปลงคลาส java ของฉันใน bytecode ดังนั้นฉันจึงต้องการการกำหนดค่าคอมไพล์ แต่เหตุใดจึงจำเป็นต้องมีการกำหนดค่ารันไทม์ฉันจึงต้องมีอย่างอื่นเพื่อเรียกใช้แอปพลิเคชันของฉันใน JVM

ขออภัยหากฟังดูโง่ แต่ไม่เข้าใจ

คำตอบ:


149

ในกรณีที่พบบ่อยที่สุดอาร์ติแฟกต์ที่ต้องการในเวลาคอมไพล์เป็นส่วนย่อยของสิ่งที่จำเป็นในรันไทม์ ตัวอย่างเช่นสมมุติว่าโปรแกรมที่เรียกว่าappการใช้ห้องสมุดfooและห้องสมุดfoo ภายในbarใช้ห้องสมุด จากนั้นfooจำเป็นเท่านั้นในการคอมไพล์appแต่ทั้งสองอย่างfooและbarจำเป็นเพื่อเรียกใช้งาน นี่คือเหตุผลว่าทำไมโดยค่าเริ่มต้นทุกอย่างที่คุณใส่ไว้ในการcompileกำหนดค่าของ Gradle จะปรากฏให้เห็นในการruntimeกำหนดค่าด้วย แต่สิ่งที่ตรงกันข้ามไม่เป็นความจริง


20
ความอัปยศนี้ไม่ได้กล่าวถึงอย่างชัดเจนในgradle.org/docs/current/userguide/dependency_management.html พวกเขาใช้ทั้งคอมไพล์และรันไทม์โดยไม่ระบุความหมายอย่างชัดเจน ...
silasdavis

2
@silasdavis ในเอกสารอธิบายความแตกต่าง: gradle.org/docs/current/userguide/…ใน 8.3 การกำหนดค่าการพึ่งพา
angelcervera

@angelcervera อ่า 8. พื้นฐานการจัดการการพึ่งพาและ 51. การจัดการการพึ่งพา ฉันเห็นว่าทำไมพวกเขาถึงมีสองส่วน แต่บางทีมันอาจจะดีถ้าส่วนหลังอ้างถึงอดีต ฉันคิดว่าฉันลงจอดในวันที่ 51 และคาดว่าจะให้บัญชีเต็มรูปแบบ
silasdavis

@silasdavis ที่แท้ทรู. เช่นเดียวกับส่วนอื่น ๆ ในเอกสารประกอบ ฉันต้องใช้เวลาว่างเท่ากันเพื่ออ่านเอกสารทั้งหมดตั้งแต่ A ถึง Z
angelcervera

1
@Peter Niederwieser หากงานคอมไพล์แสดงการอ้างอิงเดียวกันกับรันไทม์คุณจะใช้รันไทม์ในสถานการณ์ใดเมื่อเทียบกับคอมไพล์
rj2700
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.