0

我有两个项目 - Project1 和 Project2。Project1 包含所有的 java 类。而project2包含了project1中需要的所有jar文件。意味着,Project1 取决于 Project1(对于 jars)。

我正在使用 Glassfish 服务器。在创建 Project1 的 war 文件时,我包含了 project2 中的所有 jar 文件。

示例:
Project2 包含 2 个包 - POI 和 Web 服务。
POI包包含:
poi-examples-3.6-20091214.jar、
poi-contrib-3.6-20091214.jar、
poi-ooxml-3.6-20091214.jar、
poi-ooxml-schemas-3.6-20091214.jar、
poi-scratchpad- 3.6-20091214.jar。

web-services 包包含:
javax.servlet-3.0.jar、
javax.servlet-api.jar、
jersey-bundle-1.10.jar、
jersey-client-1.12.jar、
jersey-core-1.12.jar、
jersey-multipart- 1.4.jar。

现在为了从命令提示符创建 Project1 的 war 文件,我使用了以下命令:

jar cvf Project1.war D:\JavaProject\Project2\lib\external\poi\poi-examples-3.6-20091214.jar D:\JavaProject\Project2\lib\external\poi\poi-contrib-3.6-20091214.jar D:\JavaProject\Project2\lib\external\poi\poi-ooxml-3.6-20091214.jar D:\JavaProject\Project2\lib\external\poi\poi-ooxml-schemas-3.6-20091214.jar D:\JavaProject\Project2\lib\external\poi\poi-scratchpad-3.6-20091214.jar D:\JavaProject\Project2\lib\external\web-services\javax.servlet-3.0.jar D:\JavaProject\Project2\lib\external\web-services\javax.servlet-api.jar D:\JavaProject\Project2\lib\external\web-services\jersey-bundle-1.10.jar D:\JavaProject\Project2\lib\external\web-services\jersey-client-1.12.jar D:\JavaProject\Project2\lib\external\web-services\jersey-core-1.12.jar D:\JavaProject\Project2\lib\external\web-services\jersey-multipart-1.4.jar 

在当前目录中创建的 Project1.war 文件。但是,当我尝试在 Glassfish 服务器上部署 Project1.war 时,遇到了这个错误:

C:\glassfish3\glassfish\domains\domain1\applications\Project1\D:\JavaProject\Project2\lib\external\poi\poi-contrib-3.6-20091214.jar

(C:\glassfish3\glassfish\domains\domain1\applications\ 是部署后复制“.war”文件的目录)

我无法理解这个问题。我为创建war文件而执行的命令有问题吗?使用命令行提示符创建war文件时如何包含外部jar?

请帮忙..提前谢谢!

4

2 回答 2

1

WAR 文件必须具有特定的文件结构。

/   
    META-INF/
    WEB-INF/
        classes/
             classes and other classpath resources go here
        lib/
             jar files go here
        web.xml
    other webapp stuff; e.g. HTML, JSPs, CSS ...

如果你只是随意地将东西扔到一个 JAR 文件中,当它被 webapp 容器解包时,它不会被识别为 webapp。

于 2013-04-25T12:29:24.763 回答
0

您应该使用WAR 展开的布局,换句话说,project2 应该包含在 $PROJECT1_DEPLOYMENT_DIR/WEB-INF/lib 等等。然后,您的 jar 命令将生成一个可部署到 Glassfish 或任何其他 servlet 容器的文件。

于 2013-04-25T12:25:32.690 回答