คำถามติดแท็ก classloader

คลาสโหลดเดอร์เป็นอ็อบเจ็กต์ที่รับผิดชอบในการโหลดคลาสใน Java

11
ต้องการจัดการกับ“ Xerces hell” ใน Java / Maven หรือไม่
ในที่ทำงานของฉันการกล่าวถึงเพียงคำว่า Xerces นั้นเพียงพอที่จะกระตุ้นความโกรธแค้นจากผู้พัฒนา ภาพรวมคร่าวๆของคำถาม Xerces อื่น ๆ เกี่ยวกับ SO ดูเหมือนจะบ่งบอกว่าผู้ใช้ Maven เกือบทั้งหมดนั้น "ถูก" โดยปัญหานี้ในบางจุด น่าเสียดายที่การเข้าใจปัญหาต้องใช้ความรู้เล็กน้อยเกี่ยวกับประวัติของ Xerces ... ประวัติศาสตร์ Xerces เป็นตัวแยกวิเคราะห์ XML ที่ใช้กันอย่างแพร่หลายในระบบนิเวศ Java เกือบทุกไลบรารีหรือกรอบงานที่เขียนใน Java ใช้ Xerces ในบางความจุ ขวด Xerces รวมอยู่ในไบนารีอย่างเป็นทางการจนถึงทุกวันนี้ ยกตัวอย่างเช่น Xerces 2.11.0 การดำเนินขวดเป็นชื่อและไม่xercesImpl.jarxercesImpl-2.11.0.jar ทีม Xerces ไม่ได้ใช้ Mavenซึ่งหมายความว่าพวกเขาไม่ได้อัปโหลดปล่อยอย่างเป็นทางการเพื่อMaven กลาง Xerces เคยถูกปล่อยออกมาเป็น jar เดียว ( xerces.jar) แต่ถูกแบ่งออกเป็นสองขวดหนึ่งอันประกอบด้วย API ( xml-apis.jar) …

18
วิธีโหลดไฟล์ JAR แบบไดนามิกที่รันไทม์?
ทำไมการทำเช่นนี้ใน Java จึงเป็นเรื่องยาก หากคุณต้องการมีระบบโมดูลใด ๆ คุณจะต้องสามารถโหลดไฟล์ JAR แบบไดนามิกได้ ฉันบอกว่ามีวิธีที่จะทำได้ด้วยการเขียนของคุณเองClassLoaderแต่นั่นเป็นงานที่ต้องทำหลายอย่างสำหรับสิ่งที่ควร (อย่างน้อยก็ในความคิดของฉัน) จะง่ายเหมือนการเรียกวิธีที่มีไฟล์ JAR เป็นอาร์กิวเมนต์ ข้อเสนอแนะสำหรับรหัสง่ายๆที่ทำเช่นนี้?
308 java  jar  classloader 

13
การสแกนหมายเหตุประกอบ Java เมื่อรันไทม์ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ วิธีที่ดีที่สุดในการค้นหา classpath ทั้งหมดสำหรับคลาสที่มีคำอธิบายประกอบคืออะไร ฉันทำห้องสมุดและฉันต้องการอนุญาตให้ผู้ใช้ใส่คำอธิบายประกอบในชั้นเรียนของพวกเขาดังนั้นเมื่อเว็บแอปพลิเคชันเริ่มต้นฉันต้องสแกน classpath ทั้งหมดเพื่อหาคำอธิบายประกอบบางอย่าง คุณรู้ว่าห้องสมุดหรือสิ่งอำนวยความสะดวก Java ทำเช่นนี้? แก้ไข: ฉันกำลังคิดถึงบางสิ่งบางอย่างเช่นฟังก์ชั่นใหม่สำหรับ Java EE 5 Web Services หรือ EJB คุณใส่คำอธิบายประกอบชั้นเรียนของคุณด้วย@WebServiceหรือ@EJBและระบบค้นหาชั้นเรียนเหล่านี้ในขณะที่โหลดเพื่อให้สามารถเข้าถึงได้จากระยะไกล

4
ความแตกต่างระหว่างโหลดเดอร์คลาสบริบทของเธรดและ classloader ปกติ
ความแตกต่างระหว่างตัวโหลดคลาสบริบทของเธรดและตัวโหลดคลาสปกติคืออะไร นั่นคือถ้าThread.currentThread().getContextClassLoader()และgetClass().getClassLoader()ส่งคืนคลาสโหลดเดอร์อ็อบเจ็กต์ที่แตกต่างกันอันใดจะถูกใช้?

14
URL เพื่อโหลดทรัพยากรจาก classpath ใน Java
ใน Java คุณสามารถโหลดทรัพยากรทุกชนิดโดยใช้ API เดียวกัน แต่ใช้โปรโตคอล URL ที่แตกต่างกัน: file:///tmp.txt http://127.0.0.1:8080/a.properties jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class นี่เป็นการถอดรหัสการโหลดทรัพยากรจริงจากแอปพลิเคชันที่ต้องการทรัพยากรและเนื่องจาก URL เป็นเพียงสตริงการโหลดทรัพยากรจึงสามารถกำหนดค่าได้อย่างง่ายดาย มีโปรโตคอลในการโหลดทรัพยากรโดยใช้ classloader ปัจจุบันหรือไม่? นี่คล้ายกับโปรโตคอล Jar ยกเว้นว่าฉันไม่จำเป็นต้องรู้ว่าไฟล์ jar หรือโฟลเดอร์คลาสใดที่ทรัพยากรมาจาก แน่นอนว่าฉันสามารถทำได้โดยใช้Class.getResourceAsStream("a.xml")แต่จะต้องใช้ API อื่นและด้วยเหตุนี้การเปลี่ยนแปลงรหัสที่มีอยู่ ฉันต้องการที่จะสามารถใช้สิ่งนี้ในทุกสถานที่ที่ฉันสามารถระบุ URL สำหรับทรัพยากรได้โดยเพียงแค่อัปเดตไฟล์คุณสมบัติ
197 java  url  classloader 

7
Class.getResource () และ ClassLoader.getResource () แตกต่างกันอย่างไร?
ฉันสงสัยว่าความแตกต่างระหว่างClass.getResource()และเป็นClassLoader.getResource()อย่างไร แก้ไข: ฉันต้องการทราบเป็นพิเศษหากแคชใด ๆ ที่เกี่ยวข้องในระดับไฟล์ / ไดเรกทอรี เช่นเดียวกับใน "รายการไดเรกทอรีถูกแคชในรุ่น Class?" AFAIK ต่อไปนี้ควรทำเช่นเดียวกัน แต่ไม่: getClass().getResource() getClass().getClassLoader().getResource() ฉันค้นพบสิ่งนี้เมื่อเล่นซอกับรหัสการสร้างรายงานที่สร้างไฟล์ใหม่WEB-INF/classes/จากไฟล์ที่มีอยู่ในไดเรกทอรีนั้น เมื่อใช้วิธีการจากชั้นเรียนฉันสามารถค้นหาไฟล์ที่มีเมื่อใช้งานโดยใช้getClass().getResource()แต่เมื่อพยายามดึงไฟล์ที่สร้างขึ้นใหม่ฉันได้รับวัตถุที่ไม่มีค่า การเรียกดูไดเรกทอรีอย่างชัดเจนแสดงว่ามีไฟล์ใหม่ ชื่อไฟล์ถูกต่อท้ายด้วยเครื่องหมายสแลชเช่นเดียวกับใน "/myFile.txt" ในทางกลับกันClassLoaderเวอร์ชั่นของเวอร์ชั่นgetResource()ก็พบไฟล์ที่สร้างขึ้น จากประสบการณ์นี้ดูเหมือนว่าจะมีการแคชรายการไดเรกทอรีที่เกิดขึ้น ฉันถูกและถ้าเป็นเช่นนั้นเอกสารนี้อยู่ที่ไหน? จากAPI เอกสารบนClass.getResource() ค้นหาทรัพยากรที่มีชื่อที่กำหนด กฎสำหรับการค้นหาทรัพยากรที่เกี่ยวข้องกับคลาสที่กำหนดถูกนำไปใช้โดยการกำหนดคลาสโหลดเดอร์ของคลาส วิธีนี้มอบให้กับ class loader ของวัตถุนี้ หากวัตถุนี้ถูกโหลดโดยตัวโหลดคลาส bootstrap วิธีจะมอบหมายให้ ClassLoader.getSystemResource (java.lang.String) สำหรับฉันการอ่านนี้ "Class.getResource เรียกชื่อ getResource () ของ classloader ของมันเอง" getClass().getClassLoader().getResource()ซึ่งก็จะเป็นเช่นเดียวกับการทำ แต่เห็นได้ชัดว่าไม่ใช่ มีใครช่วยเล่าเรื่องนี้ให้ฉันฟังหน่อยได้ไหม?

11
ค้นหาตำแหน่งที่โหลดคลาส java
ไม่มีใครรู้วิธีการหาโปรแกรมโดยที่ java classloader จริงโหลดคลาสจาก? ฉันมักจะทำงานในโครงการขนาดใหญ่ที่ classpath ใช้เวลานานและการค้นหาด้วยตนเองไม่ใช่ตัวเลือกจริงๆ ฉันเพิ่งมีปัญหาที่ classloader กำลังโหลดรุ่นที่ไม่ถูกต้องของชั้นเพราะมันอยู่ใน classpath ในสองสถานที่ที่แตกต่างกัน ดังนั้นฉันจะรับ classloader เพื่อบอกฉันว่าอยู่ที่ไหนบนดิสก์ไฟล์คลาสจริงมาจากไหน แก้ไข:จะเกิดอะไรขึ้นถ้า classloader ไม่สามารถโหลดคลาสได้เนื่องจากมีเวอร์ชันที่ไม่ตรงกัน (หรืออย่างอื่น) มีอยู่หรือไม่เราสามารถค้นหาไฟล์ที่พยายามอ่านก่อนที่จะอ่านได้หรือไม่

3
JVM ตั้งค่าสถานะ CMSClassUnloadingEnabled ทำอะไรได้จริง
ฉันไม่สามารถหาคำจำกัดความของสิ่งที่ธงชาติ Java VM CMSClassUnloadingEnabledทำได้จริงนอกเหนือจากคำจำกัดความระดับสูงที่คลุมเครือเช่น "กำจัดปัญหา PermGen ของคุณ" ( ซึ่งไม่ใช่ btw) ฉันดูเว็บไซต์ของ Sun / Oracle แล้วและแม้แต่รายการตัวเลือกก็ไม่ได้พูดว่าทำอะไร จากการคาดคะเนชื่อของธงฉันเดาว่า CMS Garbage Collector ไม่ได้เป็นค่าเริ่มต้นในการยกเลิกการโหลดคลาสและค่าสถานะนี้จะเปิดใช้ แต่ฉันไม่แน่ใจ

7
ยกเลิกการโหลดคลาสใน java?
ฉันมีตัวโหลดคลาสที่กำหนดเองเพื่อให้แอปพลิเคชันเดสก์ท็อปสามารถเริ่มต้นการโหลดคลาสจาก AppServer ที่ฉันต้องคุยด้วย เราทำเช่นนี้เนื่องจากจำนวนขวดที่ต้องใช้ในการทำเช่นนี้ถือว่าไร้สาระ (ถ้าเราต้องการจัดส่ง) เรายังมีปัญหารุ่นหากเราไม่โหลดคลาสแบบไดนามิก ณ รันไทม์จากไลบรารี AppServer ตอนนี้ฉันเพิ่งพบปัญหาที่ฉันต้องพูดคุยกับ AppServers สองคนที่แตกต่างกันและพบว่าขึ้นอยู่กับว่าฉันโหลดคลาสใดก่อนใครจะแตกหัก ... หวังว่ามันจะสมเหตุสมผล
174 java  classloader 

7
Java ClassLoader คืออะไร
ในประโยคง่ายๆไม่กี่ Java ClassLoader คืออะไรเมื่อมันถูกใช้และทำไม? ตกลงฉันอ่านบทความวิกิ ClassLoader โหลดคลาส ตกลง. ดังนั้นถ้าฉันรวมไฟล์ jar และนำเข้า ClassLoader ก็ทำงานได้ ทำไมฉันถึงต้องกังวลกับ ClassLoader นี้ ฉันไม่เคยใช้มันและไม่รู้ว่ามันมีอยู่จริง คำถามคือทำไมคลาส ClassLoader อยู่? และคุณจะใช้มันอย่างไรในทางปฏิบัติ? (มีคดีอยู่ฉันรู้)
174 java  classloader 

4
ตรวจสอบว่าไฟล์ JAR คลาสใดมาจาก
ฉันไม่ได้อยู่หน้า IDE ตอนนี้แค่ดูรายละเอียด API CodeSource src = MyClass.class.getProtectionDomain().getCodeSource(); if (src != null) { URL jar = src.getLocation(); } ฉันต้องการตรวจสอบไฟล์ JAR ว่าเป็นคลาสใด นี่เป็นวิธีที่จะทำหรือไม่
154 java  jar  class  classloader 

6
ทรัพยากร Java เป็นไฟล์
มีวิธีใน Java ในการสร้างอินสแตนซ์ไฟล์บนทรัพยากรที่ดึงมาจาก jar ผ่าน classloader หรือไม่ แอปพลิเคชันของฉันใช้ไฟล์บางไฟล์จาก jar (ค่าเริ่มต้น) หรือจากไดเร็กทอรีระบบไฟล์ที่ระบุในรันไทม์ (อินพุตของผู้ใช้) ฉันกำลังมองหาวิธีที่สอดคล้องกันในการ a) การโหลดไฟล์เหล่านี้เป็นสตรีม b) การแสดงรายการไฟล์ในไดเร็กทอรีที่ผู้ใช้กำหนดเองหรือไดเร็กทอรีใน jar ตามลำดับ แก้ไข: เห็นได้ชัดว่าแนวทางที่ดีที่สุดคือการอยู่ห่างจาก java.io ไฟล์ทั้งหมด มีวิธีโหลดไดเร็กทอรีจาก classpath และแสดงรายการเนื้อหา (ไฟล์ / เอนทิตีที่อยู่ในนั้น) หรือไม่

5
Java, Classpath, Classloading => หลายเวอร์ชันของ jar / project เดียวกัน
ฉันรู้ว่านี่อาจเป็นคำถามโง่ ๆ สำหรับนักเขียนโค้ดที่มีประสบการณ์ แต่ฉันมีไลบรารี (ไคลเอนต์ http) ที่เฟรมเวิร์ก / ไหอื่น ๆ ที่ใช้ในโครงการของฉันต้องการ แต่ทั้งหมดนั้นต้องการเวอร์ชันหลักที่แตกต่างกันเช่น: httpclient-v1.jar => Required by cralwer.jar httpclient-v2.jar => Required by restapi.jar httpclient-v3.jar => required by foobar.jar classloader ฉลาดพอที่จะแยกพวกมันออกหรือไม่? เป็นไปได้มากที่สุด? Classloader จัดการกับสิ่งนี้อย่างไรในกรณีที่ Class เหมือนกันในทั้งสามขวด โหลดอันไหนและเพราะอะไร Classloader รับเพียงหนึ่งโถหรือผสมคลาสโดยพลการ? ตัวอย่างเช่นถ้าคลาสถูกโหลดจาก Version-1.jar คลาสอื่น ๆ ทั้งหมดที่โหลดจาก classloader เดียวกันทั้งหมดจะไปอยู่ใน jar เดียวกันหรือไม่ คุณจัดการกับปัญหานี้อย่างไร? มีเคล็ดลับในการ "รวม" ไหลงใน …

12
วิธีรับชื่อคลาสภายในไฟล์ jar
ฉันมีไฟล์ JAR และฉันต้องการชื่อคลาสทั้งหมดในไฟล์ JAR นี้ ฉันจะทำเช่นนั้นได้อย่างไร? ฉัน googled และเห็นบางอย่างเกี่ยวกับ JarFile หรือ Java ClassLoaderแต่ฉันไม่รู้ว่าจะทำอย่างไร
112 java  file  class  jar  classloader 

8
ฉันจะใส่ไฟล์ JAR ที่จำเป็นทั้งหมดในโฟลเดอร์ไลบรารีภายในไฟล์ JAR สุดท้ายด้วย Maven ได้อย่างไร
ฉันใช้ Maven ในแอปพลิเคชันแบบสแตนด์อโลนของฉันและฉันต้องการรวมการอ้างอิงทั้งหมดในไฟล์ JAR ของฉันไว้ในโฟลเดอร์ไลบรารีดังที่กล่าวไว้ในคำตอบข้อใดข้อหนึ่งที่นี่: ฉันจะสร้าง JAR ที่ปฏิบัติการได้โดยใช้ Maven ได้อย่างไร ฉันต้องการให้ไฟล์ JAR สุดท้ายของฉันมีโฟลเดอร์ไลบรารีที่มีการอ้างอิงเป็นไฟล์ JAR ไม่ใช่เหมือนกับสิ่งmaven-shade-pluginที่ทำให้การอ้างอิงในรูปแบบของโฟลเดอร์เช่นลำดับชั้น Maven ในโฟลเดอร์. m2 ที่จริงแล้วการกำหนดค่าปัจจุบันทำในสิ่งที่ฉันต้องการ แต่ฉันมีปัญหากับการโหลดไฟล์ JAR เมื่อเรียกใช้แอปพลิเคชัน ฉันโหลดคลาสไม่ได้ นี่คือการกำหนดค่าของฉัน: <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/classes/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> …

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