我正在尝试将EAR文件部署到应用程序服务器。该项目使用NetBeans 7中的Maven 3构建。
当我尝试部署Glassfish和Websphere时,CE告诉我某些类找不到,即使它们被打包在EAR文件中。应用程序服务器可以看到包中的其他类,但不是所有类。
可能是什么问题?我一整天都在努力解决这个问题。我查看了Maven POM文件,并一直在阅读有关部署描述符的内容,但我似乎没有取得进展。
我得到的错误是严重:找不到类[className]。加载[className]时出错
以下是该项目的主要pom文件:
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>SeaMarNetting</artifactId>
<groupId>com.manageinc.seamar</groupId>
<version>1.0RC1</version>
</parent>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-ear</artifactId>
<packaging>ear</packaging>
<version>${project.parent.version}</version>
<name>SeaMarNetting-ear JEE5 Assembly</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-project-deps</artifactId>
<version>${project.parent.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-ejb</artifactId>
<version>${project.parent.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-jpa</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-web</artifactId>
<version>${project.parent.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.manageinc.seamar</groupId>
<artifactId>SeaMarNetting-web</artifactId>
<version>1.0RC1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>${source.version}</source>
<target>${compile.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<version>5</version>
<displayName>SeaMarNetting</displayName>
<modules>
<jarModule>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-jpa</artifactId>
</jarModule>
<ejbModule>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-ejb</artifactId>
</ejbModule>
<webModule>
<groupId>${project.parent.groupId}</groupId>
<artifactId>SeaMarNetting-web</artifactId>
<contextRoot>/nets</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
我尝试按照建议更改作用域,但收到了相同的错误消息。我刚开始使用Maven,我相信它很简单,我不知道。
谢谢。
如果不能查看您的POM文件,我的最佳猜测是您没有正确定义依赖项。Apache的POM参考:http://maven.apache.org/pom.html#The_Basics显示:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>
...
我认为您需要关注"scope"属性,可以将其列为"provided"或"system"。这样maven就不会在其存储库中查找您的jar了。以下是带有描述的可能性:
范围:这个元素指的是手头任务的类路径(编译和运行时、测试等),以及如何限制依赖项的传递性。有五个作用域>可用:编译、提供、运行时、测试、系统。
compile-这是默认作用域,如果未指定则使用。编译依赖项>在所有类路径中都可用。此外,这些依赖关系被传播到dependent>项目。
provided-这很像compile,但表示您希望JDK或容器>在运行时提供它。它仅在编译和测试类路径上可用,并且>不可传递。
runtime-此范围表示编译不需要依赖项,但它是>以供执行。它在运行时和测试类路径中,但不在编译类路径中。
测试-此范围表示正常使用>应用程序,并且仅可用于测试编译和执行阶段。
系统-除了必须提供>明确包含它。工件总是可用的,并且不会在>存储库。
同样重要的是,要记住为每个依赖项包含一个与存储库的groupId相对应的groupId。我发现,即使我的文件保存在本地,它们仍然需要groupId——即使作用域是"提供的"