Здравствуйте, я новичок в Stack Overflow, я неуклюж, когда дело доходит до вопросов. Но я предоставлю дополнительную информацию, если вопрос неясен. Это проблема, с которой я столкнулся, следующим образом:
Фон: У меня есть два проекта: один — мой бизнес-проект A, а другой — проект Java Agent B. Я запускаю их, используя метод «java -javaagent:B.jar -jar A.jar».
Дивергенция: В настоящее время существует два разных подхода:
(I) Я помещаю B.jar и связанные с ним файлы конфигурации в «последовательный» каталог родительского каталога Base_Dir A.jar и запускаю их с помощью сценария Shell.
(II) Мой руководитель хочет, чтобы я упаковал «последовательный» каталог в A.jar.
Вопросы: По поводу вышеуказанного расхождения у меня есть два вопроса:
(I) Возможно ли упаковать «последовательный» каталог в A.jar в проекте Java?
(II) Каковы обычно наиболее распространенные практики или лучшие практики для решения такого типа проблем со структурой проекта?
Если я получу от вас какой-либо ответ, я буду очень признателен.
Структура каталогов:
Я не могу публиковать изображения в своем вопросе, это моя структура:
C:.
│ SerialNumberAppDemo-1.0-SNAPSHOT.jar
│
└─serial
ConfoundLogback.xml
demo-1.jar
readme.md
sample-configs.properties
бизнес-банка и каталог серийных номеровсодержимое каталога сериалов




Когда B.jar содержится в A.jar, опция -javaagent:B.jar не работает, поскольку эта опция ищет файл в файловой системе по умолчанию, а не внутри другого файла jar.
Начиная с Java 9, вы можете указать атрибут Launcher-Agent-Class в манифесте A.jar, чтобы указать класс агента в том же файле jar, который будет запускаться автоматически при запуске приложения с помощью -jar A.jar (поэтому -javaagent тогда не нужен ). Для этого необходимо, чтобы классы Java-агента (из B.jar) были добавлены непосредственно в A.jar вместо добавления B.jar в A.jar как одна запись.
При добавлении других ресурсов вам, возможно, придется адаптировать код агента для использования getResource или getResourceAsStream вместо поиска файла рядом с файлом jar в файловой системе по умолчанию на случай, если ему потребуется прочитать один из них (например, ConfoundLogback.xml).
Другие файлы, например. readme.md и sample-configs.properties не выглядят так, как будто они нужны Агенту, но предназначены для чтения другими инструментами или даже людьми. Достаточно ли для них того, чтобы эти файлы находились внутри jar-файла, а не были сразу видны в каталоге, — это вопрос, выходящий за рамки Stackoverflow.
Подводя итог, просто добавить каталог serial в jar-файл приложения не получится.
Я искренне ценю ваш ответ и получил массу ценной информации. Еще раз спасибо.