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

时间:2016-02-10 12:38:22

标签: maven pom.xml java-web-start jnlp

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

为了安全,

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中的jar:

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

现在,当我启动JNLP时,我收到someJarthatIneed无法加载的错误。但是,当我手动将lib移到WEB-INF之外时,没有发生此错误。

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

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

但它也不起作用..)

任何有关此问题的帮助都将得到解决。 :)

2 个答案:

答案 0 :(得分:1)

感谢所有建议......但是,我找到了办法......

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

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

然后使用

float main(void) { 

    float height;   
    printf("Enter your height in cm:\n");
    scanf("%f",&height);    

    float weight; 
    printf("Enter your weight in kg:\n");
    scanf("%f",&weight);

    float bmi;
    bmi = (weight/(height/100)*(height/100));

    if (bmi <= 16) {
        printf("Severely Underweight\n");
    }
    else if (16 < bmi <= 18.5) {
        printf("Underweight\n");
    }
    else if (18.5 < bmi <= 25) {
        printf("Healthy\n");
    }
    else if (25 < bmi <= 30) {
        printf("Overweight\n");
    }
    else {
        printf("Severely Overweight\n");
    }
}
在pom中,你使用maven-war-plugin进行战争,从WEB-INF中删除lib文件夹..

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

答案 1 :(得分:0)

http-request中没有WEB-INF中的内容,WEB-INF中没有的内容将被视为资源,因此容器不会加载。

如果您的应用程序不需要放入WEB-INF / lib的jar,只需将它们移到WEB-INF文件夹之外,它们就会被视为资源。

你也可以考虑建立一个&#34; uberjar&#34;为你JNLP jar,将所有依赖包装到一个jar中。