为什么我不能在 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。
我在几个博客上看到不建议(或不可能)在 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。