正如@user353852 所述,您当前的依赖项仅包含 Java EE 6 API,不包含任何方法体。所以你不能针对它运行代码。要在容器外运行代码,您需要获取“具体”依赖项(来自 GlassFish 存储库):
<repositories>
<repository>
<id>glassfish-repository</id>
<url>http://download.java.net/maven/glassfish</url>
</repository>
...
</repositories>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
...
</dependencies>
请注意,不应使用compile
范围声明此类依赖项,您不想捆绑它(它应该是provided
or might test
,但不是compile
or runtime
)。
我想知道 javaee 实现的提供者重要吗?通常我使用 Apache 服务器,所以最好有与服务器上相同的 javaee 实现。
理论上,没有。但在实践中,我建议使用您将要使用的服务器(或 Java EE 参考实现)中的实现 JAR。由于您使用的是 Java EE 6,这实际上意味着在这两种情况下都来自 GlassFish v3 的 JARS。
第二个问题更为重要。javax.servlet 只是 javaee-api 实现的一部分,我在哪里可以找到其他的。现在我需要“javax/validation/Validation”。
对于 Bean Validation API,您需要以下内容(Hibernate Validator 是 RI):
<repositories>
<!-- For Hibernate Validator -->
<repository>
<id>jboss</id>
<name>JBoss repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
...
</repositories>
<dependencies>
<!-- Bean Validation API and RI -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
<scope>runtime</scope>
</dependency>
...
</dependencies>
如何确定哪个工件实现了 javaee 的各个方面。也许某处有某种“地图”?
没有任何官方信息,但BalusC 的这个不错的回答会有所帮助。