为什么我不能在 WEB-INF 之外打包某些 JAR

Why can't I pack certain JARs outside WEB-INF

我在几个博客上看到不建议(或不可能)在 WEB-INF 文件夹之外打包 jar。我很好奇为什么会这样..

例如,

mainStuff.war
|
|-->WEB-INF
|   |
|   |-->lib     (having many jars, used by the contents of specificStuff.jar
|   |-->classes
|   |-->web.xml
|
|-->META-INF        (having the .MF file and signed files .SF and .DSA)
|
|
|-->index.jsp       (consists of a jnlp xml, referring to the jars in lib)
|
|
|-->specificStuff.jar   (this is a separate jar module, which is mentioned in the POM of the war)

在 index.jsp 的 jnlp 配置中,我指的是 lib 中的 jars,如:

  <resources>     
    <java version="1.6+"/>
    <jar href="specificStuff.jar"/> 
    <jar href="lib/someJarthatIneed.jar"/>
  </resources>     

现在,当我启动我的 JNLP 时,我收到 someJarthatIneed 加载失败的错误。但是,当我手动将lib移到WEB-INF之外时,并没有出现这个错误。

所以,我需要知道的是,有什么办法可以将lib文件夹和所有jar打包到WEB-INF之外?? 要么 为什么我的 jnlp(在 WEB-INF 之外)无法从 WEB-INF/lib 加载 jar。 (我尝试将 jar 的路径更改为

<jar href="WEB-INF/lib/someJarthatIneed.jar"/>

但也没用..)

如有任何帮助,我们将不胜感激。 :)

WEB-INF中的内容不能从http请求中获取,不在WEB-INF中的内容将被视为资源,因此不会被容器加载。

如果您放入 WEB-INF/lib 的 jars 不是您的应用程序所必需的,只需将它们移出 WEB-INF 文件夹,它们将被视为资源。

您还可以考虑为您构建一个 "uberjar" JNLP jar,将所有依赖项打包到一个 jar 中。

感谢所有建议...但是,我找到了一种方法...

我使用maven-dependency-plugin(copy-dependencies)将所有的依赖jar复制到文件夹lib到指定位置。

<plugin>      
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/src/main/webapp/lib</outputDirectory>
                <includeScope>compile</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin> 

然后使用

  <packagingExcludes>WEB-INF/lib/</packagingExcludes>

在您使用 maven-war-plugin 制作 war 的 pom 中,从 WEB-INF..

中删除 lib 文件夹

所以,现在 index.jsp 能够从库中获取所有 jar。