Java 如何解析docker内部jboss部署结构的资源根路径

Java 如何解析docker内部jboss部署结构的资源根路径,java,docker,jboss,wildfly,Java,Docker,Jboss,Wildfly,我有一个罐子,在生成docker图像时无法复制到ear。此外,由于某些依赖性问题,我无法将JAR添加为模块。 因此,我在jboss部署结构文件中添加了下面的资源根(以使其与在EAR的lib目录中复制jar相同) 假的 <!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear --> <!-- This is the top level ea

我有一个罐子,在生成docker图像时无法复制到ear。此外,由于某些依赖性问题,我无法将JAR添加为模块。 因此,我在jboss部署结构文件中添加了下面的资源根(以使其与在EAR的lib目录中复制jar相同)

假的

<!-- 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>
我将此ear部署到docker之外的wildfly-15.0.1.Final服务器时,它工作正常。 解析了资源根目录的路径,将outside-abc.jar复制到下面的tmp文件夹(在服务器启动时动态生成),我可以使用outside-abc.jar类执行操作。 wildfly-15.0.1.Final\standalone\tmp\vfs\deployment\deploymentdc506469ec651715

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
对于上述情况,我在bin和standalone文件夹中安装了jar,分别为bin/outsideEar/outer-abc.jar和standalone/outsideEar/outer-abc.jar。因此,我确认docker wildlfy服务器可以使用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="./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"/>
  • 资源根路径如何解析(docker内部和外部) 使用物理代码source=“true”和使用物理代码source=“false”

  • 有没有办法只传递资源根目录名,以便 该目录下的所有jar都可以复制到tmp/deployment。如果 不可能,那么有什么方法可以应用于传递jar吗 使用属性文件或环境变量动态命名到jboss-deployment-structure.xml,以便在容器启动时将jar复制到temp/deployment

如果您能提供任何帮助,我们将不胜感激


谢谢。

这似乎是一个奇怪的用例。有没有理由不能将JAR仅仅添加到EAR中?这不是一个完整的答案,但使用物理代码源并不是为了您想要做的事情。实际上,在调用诸如*.class.getProtectionDomain().getCodeSource()之类的东西时,需要更改Wildfly中使用的虚拟文件系统的行为,以使jar从物理路径而不是虚拟位置可用。使用物理代码源,战争中的jar将被提取到temp目录,或者被分解,getCodeSource将解析为分解的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="./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"/>