У меня есть банка, которую нельзя скопировать на ухо при создании docker-образа. Кроме того, я не могу добавить банки как модули из-за некоторых проблем с зависимостями. Итак, я добавил ниже корень ресурса в мой файл jboss-deploy-structure (чтобы сделать его таким же, как копировать jar в каталог lib EAR).
false
<!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear -->
<!-- This is the top level ear module, which contains all the classes in the EAR's lib folder -->
<deployment>
<!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
<!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
<exclude-subsystems>
<subsystem name="jpa"/>
</exclude-subsystems>
<dependencies>
<module name="org.abc" services="import"/>
<module name="org.abcde.zye" optional="true"/>
</dependencies>
<resources>
<!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory -->
<resource-root path="/../../../standalone/outsideEar/outside-abc.jar"/>
</resources>
</deployment>
<sub-deployment name="abc-abc.war">
<dependencies>
<module name="org.abcde.zye" optional="true"/>
</dependencies>
</sub-deployment>
<sub-deployment name="abc-ejb.jar">
<dependencies>
<module name="org.abcde.zye" optional="true"/>
</dependencies>
</sub-deployment>
Структура моего уха:
my-ear.ear
|- lib
|- abc-abc.war
|- abc-ejb.jar
|- META-INF
|- application.xml
|- jboss-app.xml
|- jboss-deployment-structure.xml
|- maven
|- pom.properties
|- pom.xml
Когда Я развертываю это ухо на wildfly-15.0.1. Наконец, сервер вне докера работает нормально ,Путь к корню ресурса определен, файл outside-abc.jar скопирован в указанную ниже папку tmp (которая генерируется динамически при запуске сервера), и я могу выполнить операцию, используя классы outside-abc.jar. wildfly-15.0.1.Final \ standalone \ tmp \ vfs \ deploy \ deploydc506469ec651715
wildfly-15.0.1. Окончательная структура:
wildfly-15.0.1.Final
|- bin
|- domain
|- modules
|- standalone
|- outsideEar
<!-- This path is resolved with resource-root path="/../../../standalone/outsideEar/outside-abc.jar" -->
|- outside-abc.jar
|- configuration
|- data
|- deployments
|- my-ear.ear
|- lib
|- log
|- tmp
|-jboss-modules.jar
Еще один случай, который работает нормально: если я использую ниже root-ресурса, тогда мой jar должен находиться внутри папки bin как wildfly-15.0.1.Final/bin/outsideEar/outside-abc.jar <resource-root path="../../outsideEar/outside-abc.jar"/>
Конфигурация Docker:
Если я использую такую же структуру, как выше, создайте образ Docker и запустите контейнер для образа . не может идентифицировать файл jar и не копировать его в папку wildfly-15.0.1.Final \ standalone \ tmp \ vfs \ deploy \ deploydc506469ec651715 , которая в итоге вызывает ClassNotFoundException , в то время каквыполнение операций. Я проверил, что outside-abc.jar правильно скопирован в подключенный каталог docker (уже добавлена конфигурация в файл docker-compose).
Я был дальше внутри этого и обнаружил, чтоатрибут use-physical-code-source="true"
может быть установлен для ресурса-корня для разрешения пути с использованием физического расположения исходного кода.
Когда use-physical-code-source="true"
: читает с физического места. Я не понимаю, каково физическое местоположение внутри докера. Я думаю, что это папка развертывания или развертывания / my-ear.ear / META-INF.
Когда use-physical-code-source="false"(default is false)
: читает из каталога vfs (Inside temp).
Я пробовал много разныхпути, чтобы заставить это работать, но, не было удачи.
Возможные случаи, которые я пробовал:
<resource-root path="./../../../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../outsideEar/outside-abc.jar"/>
<resource-root path="./../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../outsideEar/outside-abc.jar"/>
<resource-root path="./../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./outsideEar/outside-abc.jar"/>
<resource-root path="./../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./../standalone/outsideEar/outside-abc.jar"/>
<resource-root path="./standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
<resource-root path="./standalone/outsideEar/outside-abc.jar"/>
Для вышеупомянутых случаев, Я установил банки внутрикак bin, так и автономные папки как bin / outsideEar / outside-abc.jar и автономные / outsideEar / outside-abc.jar. Итак, я подтверждаю, что jar доступен для сервера настройки wildlfy .
Сводка требований:
Как работает ресурс-Корневой путь разрешен (внутри и снаружи докера), когда use-Physical-Code-Source = "True" и Use-Physical-Code-Source = "false"?
Есть ли способпередать только имя каталога для корня ресурса, чтобы все jar-файлы в этом каталоге могли быть скопированы в tmp / deploy. Если это невозможно, то можно ли каким-либо образом применить динамическую передачу имени jar в jboss-deploy-structure.xml, используя либо файл свойств, либо переменную окружения, чтобы при запуске контейнера jar можно было скопировать в temp / deploy.
Любая помощь, которую вы можете оказать, будет принята с благодарностью.
Спасибо.