Java ClassPath Добавить общий файл - это не значение?JAVA

Программисты JAVA общаются здесь
Anonymous
Java ClassPath Добавить общий файл - это не значение?

Сообщение Anonymous »

My Java-программа опирается на сторонний каталог конфигурации как часть своего класса. Первоначально я непосредственно добавил весь каталог в путь класса с помощью -cp /a/b/c:.
Однако я позже обнаружил, что некоторые из файлов конфигурации в этом каталоге оказывают непреднамеренное влияние на мое приложение. В действительности мне нужно только 4 конкретных файла конфигурации из 8 общих файлов, присутствующих в их каталоге.-cp /a/b/c/1.xml:/a/b/c/2.xml
< /code>
Однако этот подход не сработал, как и ожидалось. После рассмотрения документации Java SE я узнал, что:
  • Добавление каталога (например,/a/b/c/) в класс, загружает файлы классов и файлы ресурсов из этого каталога. каталог.
Это поднимает следующие вопросы:

Что происходит, когда вы добавляете отдельные файлы (например, /a/b/c/1.xml) к классу? Эти файлы игнорируются? Позвольте мне предоставить более подробную информацию о конкретном сценарии моей проблемы.
Я поддерживаю очень старую программу Java, которая использует Guice-4.1.0 , а Guice зависит от пакета Commons-Logging .
В моей программе я использую SLF4J-1.7.36 + rescack-1.2.12 к выводу. То есть в моей службе включает в себя SLF4J + LOGACK + Commons-Logging .
Затем моя программа работает в кластере Hadoop через клиент Hadoop. И моя программа зависит от каталога конфигурации Hadoop, поддерживаемого коллегами в других отделениях, но этот каталог содержит Commons-Logging.properties файл.
-rwxr-xr-x 1 yarn yarn 1020 Sep 13 2024 commons-logging.properties
-rwxr-xr-x 1 yarn yarn 7017 Sep 13 2024 core-site.xml
-rwxr-xr-x 1 yarn yarn 1697 Sep 13 2024 hadoop-env.sh
-rwxr-xr-x 1 yarn yarn 1015 Sep 19 2024 hadoop-metrics2.properties
-rwxr-xr-x 1 yarn yarn 16926 Sep 13 2024 hdfs-site.xml
-rwxr-xr-x 1 yarn yarn 1602 Sep 13 2024 health_check
-rwxr-xr-x 1 yarn yarn 10640 Sep 13 2024 log4j.properties
-rwxr-xr-x 1 yarn yarn 783 Sep 13 2024 mapred-env.sh
-rwxr-xr-x 1 yarn yarn 7764 Sep 13 2024 mapred-site.xml
-rwxr-xr-x 1 yarn yarn 967 Sep 13 2024 taskcontroller.cfg
-rwxr-xr-x 1 yarn yarn 2406 Sep 13 2024 task-log4j.properties
-rwxr-xr-x 1 yarn yarn 3615 Sep 13 2024 yarn-env.sh
-rwxr-xr-x 1 yarn yarn 22970 Sep 13 2024 yarn-site.xml

В этом Commons-logging.properties есть конфигурация:
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger


Наш метод использования состоит в том, чтобы добавить Hadoop-client-api-3.3.6 и Hadoop-client-runtime-3.3.6 в зависимости, а затем конкатенате их Hadoop Conf Dir в обезжинии. Класс.
Я хочу отфильтровать другие файлы, которые влияют на нас, только объединив несколько файлов конфигурации, такие как /конф/core-site.xml:/conf/hdfs-site.xml:/conf/yarn-site.xml . Затем, благодаря тестированию, я обнаружил, что добавление обычных файлов в ClassPath не имеет смысла. < /P>
Поскольку этот каталог конфигурации поддерживается коллегами в других отделениях и обменивается многими компонентами, мы не можем напрямую изменить их конфигурацию. Если мы скопируем их файлы конфигурации в наш каталог конфигурации, возникнет проблема, которую они могут забыть уведомить нас, когда они обновляют конфигурацию. < /P>
Итак, я надеюсь, что есть элегантный способ решить эту проблему. При создании новой конфигурации в клиенте Hadoop измените ее на LoadDefaults = false и добавьте конкретный путь core-site.xml yarn-site.xml hdfs-site.xml на конфигурацию. Usergroupinformation.setConfiguration () .
Configuration configuration = new Configuration(false);
configuration.addResource(new Path(coreSiteXml));
configuration.addResource(new Path(hdfsSiteXml));



Подробнее здесь: https://stackoverflow.com/questions/795 ... no-meaning

Вернуться в «JAVA»