(см. Внизу обновление для решения, которое я нашел)
Похоже, что AntClassLoader поддерживает родительский первый / последний (еще не тестировал)
http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/AntClassLoader.java
Вот фрагмент
/**
* Creates a classloader for the given project using the classpath given.
*
* @param parent The parent classloader to which unsatisfied loading
* attempts are delegated. May be <code>null</code>,
* in which case the classloader which loaded this
* class is used as the parent.
* @param project The project to which this classloader is to belong.
* Must not be <code>null</code>.
* @param classpath the classpath to use to load the classes.
* May be <code>null</code>, in which case no path
* elements are set up to start with.
* @param parentFirst If <code>true</code>, indicates that the parent
* classloader should be consulted before trying to
* load the a class through this loader.
*/
public AntClassLoader(
ClassLoader parent, Project project, Path classpath, boolean parentFirst) {
this(project, classpath);
if (parent != null) {
setParent(parent);
}
setParentFirst(parentFirst);
addJavaLibraries();
}
Обновление:
Найдено это также, когда в качествеВ крайнем случае я начал угадывать имена классов в google (это то, что создало ChildFirstURLClassLoader), но, похоже, оно некорректно
Обновление 2:
1-й вариант (AntClassLoader)очень тесно связан с Ant (требуется контекст проекта и непросто передать ему URL[]
2-й вариант (из проекта OSGI в коде Google ) не совсем то, что нужноМне нужно было, так как он искал родительский загрузчик классов перед системным загрузчиком классов (кстати, загрузчик классов Ant делает это правильно). Проблема, как я понимаю, состоит в том, что ваш родительский загрузчик классов включает в себя jar (которого он не должен иметь) функциональности, котораяне был на JDK 1.4, но был добавлен в 1.5, это не повредитs родительский загрузчик последнего класса (модель обычного делегирования, например URLClassLoader) всегда будет сначала загружать классы JDK, но здесь дочерняя наивная реализация, кажется, раскрывает старый избыточный jar в загрузчике родительского класса, скрывая собственную реализацию JDK / JRE,
Мне еще предстоит найти сертифицированную, полностью протестированную, зрелую правильную реализацию Parent Last / Child First, которая не связана с конкретным решением (Ant, Catalina / Tomcat)
Обновление3 - Я нашел это! Я смотрел не туда,
Все, что я сделал, это добавил META-INF/services/javax.xml.transform.TransformerFactory
и восстановил JDK com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
вместо старого Xalan org.apache.xalan.processor.TransformerFactoryImpl
Единственная причина, по которой я пока не «принимаю свой собственный ответ», заключается в том, что я не знаю, имеет ли подход META-INF/services
такое же делегирование загрузчика классов, как и у обычных классов (например, это родитель-первый / ребенок-последний илиродитель-последний / ребенок-первый?)