Executable JAR ignores its own Class-Path attribute

做~自己de王妃 提交于 2019-11-28 07:38:47

Answering my own question:

  1. Adding arbitrary entries to Class-Path is fine on its own. The problem arises when you enable JAR indexing using:

    <configuration>
      <archive>
        <index>true</index>
      </archive>
    </configuration>
    

    Maven will omit your entries from META-INF/INDEX.LIST.

  2. When you use the JAR at runtime, Java will look at INDEX.LIST for finding classes, not MANIFEST.MF.

  3. Because your entries are missing from INDEX.LIST, they will not be found by the classloader, no matter what the manifest says.

A simple workaround is to disable JAR indexing. I'm not sure how to inject an arbitrary Class-Path with indexing enabled.

For those that may otherwise be unaware, the executable archive mechanism takes the manifest classpath and uses it to load classes external to the archive.

So if you are expecting a WAR with a manifest classpath of WEB-INF/classes to find classes in the WEB-INF/classes entry inside the archive then you will be disappointed.

Per the tooldocs page for the jar option - Link to docs

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!