如何更改jar文件在java Web应用程序中使用的路径

时间:2013-10-21 15:12:40

标签: apache unix tomcat netbeans path

我使用NetBeans 7.2.1编写了一个 java Servlet Web应用程序。该程序有一些我已附加到项目的jar文件库。使用 NetBeans Apache Tomcat 7.0.27,应用程序运行良好。

我的问题是我在项目中使用的一些jar文件库需要访问一些文件夹和文件。我将这些文件夹和文件放在整个NetBeans项目所在的目录中。但我得到了这个例外:

Exception: java.lang.RuntimeException: java.io.FileNotFoundException

所以我用这些代码找出我应该把它们放在哪里:

out.println("current directory: " + new File(".").getAbsolutePath());
out.println("current directory: " + System.getProperty("user.dir"));
out.println("current directory: " + getServletContext().getRealPath(("/")));

所以我发现当前的工作目录是:

C:\ Program Files \ Apache Software Foundation \ Apache Tomcat 7.0.27 \ bin

我的问题是如何为每个Web应用程序设置不同的目录地址?我有很多Web应用程序,其中一些使用相同的资源文件名。我不能把所有这些都放在一个目录中。

请注意,我无权访问jar文件的源代码来更改。我只需要一种方法来设置jar文件使用的绝对路径。

当我将 WAR 文件放在unix服务器上时,我遇到了同样的问题。提取的WAR文件位于服务器上的此位置:

/data02/tools/Apache/Tomcat/apache-tomcat-6.0.37/webapps/BANNEROnline

但我想我应该把资源文件夹和文件放在这个路径中(moosavi3是我的用户名!):

/家庭/ moosavi3

如何更改路径?

2 个答案:

答案 0 :(得分:1)

工作目录是启动java。[exe,bin]的目录。我假设bin目录是tomcat启动脚本的位置?如果jar都使用这个工作目录,我不相信有办法让不同的web-apps有不同的工作目录,它们都是从同一个工作目录加载到同一个jvm(java.exe)上的。

工作目录是启动二进制文件的目录,它不是您可以更改的任意值。

我怀疑这些jar文件意味着作为独立应用程序运行,并期望他们尝试访问的文件系统资源与他们自己位于同一位置。

任何文件系统资源都必须移动到java.exe的位置,以便从您的jar中获得正确的文件路径解析。

答案 1 :(得分:0)

标准Servlet项目要求将外部库放在项目根目录下的“WEB-INF / lib”目录中。您可以搜索谷歌的“servlet目录结构”并进行自己的研究以获取更多信息。 Web应用程序之间的共享库可以放在tomcat root下的'lib'目录中,它们应该由tomcat jvm选中。我的建议是保持依赖项目的具体,因为将来可能需要在不同的项目中使用不同的版本。

更新: 阅读tomcat文档中的这个页面,它将准确解释项目的结构,以及如何添加将在所有Web应用程序中共享的库:

http://tomcat.apache.org/tomcat-7.0-doc/appdev/deployment.html

更新2: 以下Stackoverflow链接介绍了如何将静态文件添加到Web应用程序的几个选项,这些选项将在运行时提供。

https://stackoverflow.com/a/2161583/940754

更新3: 使用项目的清单

添加到类路径的路径

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html