Netbeans / Glassfish - 预计会找到一个扩展目录但找到一个JAR

时间:2014-11-20 20:39:28

标签: java-ee glassfish pom.xml netbeans6.8

我正在尝试在我的本地PC上部署Netbeans / Glassfish项目。它目前正在生产中

项目似乎是基于此网址上的文档构建的企业应用程序:

https://netbeans.org/kb/docs/javaee/maven-entapp.html#intro

该项目有以下5个模块:

WI-EAR
WI-EJB
WI-Enterprise
WI-ENT-web
WE-Web

根据上面引用的教程,用于从Netbeans运行和部署的项目是“-EAR”项目。

当我右键单击WI-EAR项目节点并选择Build with Dependencies时,根据教程,我得到了这个结果:

Reactor Summary:

WI-EJB ............................................ SUCCESS [0.723s]
WI-Enterprise ..................................... SUCCESS [0.004s]
Wi-LIB ............................................ SUCCESS [0.288s]
WI-ENT-web ........................................ SUCCESS [3.012s]
WI-EAR ............................................ SUCCESS [1.520s]
------------------------------------------------------------------------
BUILD SUCCESS

我可以在“目标”目录中看到创建的.ear文件,名称为“WI-EAR”。

到目前为止一切顺利。接下来,再次根据教程,我在“项目”窗口中右键单击EAR项目节点,然后选择“运行”。

但是,此时,GlassFish控制台显示以下错误:

SEVERE: Exception while deploying the app
java.lang.IllegalArgumentException: Expected to find an expanded directory for submodule WI-EJB-1.0-SNAPSHOT.jar but found a JAR.  If this is a directory deployment be sure to expand all submodules.

通过单击Netbeans中的“WE-EAR.ear”文件,我可以看到它实际上确实包含“WI-EJB-1.0-SNAPSHOT.jar”,而不是扩展目录。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

必须更改EAR的pom.xml以包含下面的模块部分 - 请注意“解压缩”命令。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <version>5</version>
             <modules>
                    <webModule>
                        <groupId>com.mycompany</groupId>
                        <artifactId>WI-ENT-web</artifactId>
                        <unpack>true</unpack>
                        <!--<contextRoot></contextRoot>-->
                    </webModule>
                    <ejbModule>
                        <groupId>com.mycompany</groupId>
                        <artifactId>WI-EJB</artifactId>
                        <unpack>true</unpack>
                    </ejbModule>
               </modules>
    </configuration>
  </plugin>
</plugins>

ALSO

在依赖项部分下,确保声明类型 - 在我的情况下,问题是没有指定“ejb”类型。

  <dependencies>

    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>WI-ENT-web</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>war</type>
    </dependency>

    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>WI-EJB</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>ejb</type>
    </dependency>

  </dependencies>