我最近从Objectify 3.1切换到Objectify 4.0,其中涉及切换到Maven。构建将输出.class文件放在war / WEB_INF / classes下,应用程序在本地和App-Engine上都运行良好。
我的问题是,当我运行 test 目标时,它找不到我的任何测试类,因为它试图从目标/ classes目录加载它们。如果我暂时将默认输出目录切换到那个,测试运行正常,但当然真正的目标不会运行(在war / WEB-INF / classes下运行时找不到类定义)。
我尝试删除目标/ classes目录,并可能将其链接到新位置,但Eclipse会在删除后立即重新创建它。
我做错了吗?如何从指定的输出目录中使测试目标读取类?
更新2013-12-21:如果我查看App-Engine run-config和相关测试run-config的“Source”信息,两者都有(在项目名称下) )具有“类”和“测试类”子条目的“目标”条目。它还具有“war / WEB-INF”条目,其中包含“classes”和“lib”的子条目。不幸的是,我似乎无法删除前一组,我不知道是什么导致它在那里。
更新2013-12-30:这是我的pom.xml
文件...
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>DeityAE</groupId>
<artifactId>DeityAE</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.8.8</version>
</plugin>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!-- Found this on the web but doesn't seem to be working. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execute>
<id>default-cli</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/war/WEB-INF/lib/</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeArtifactIds>gwt-user,gwt-dev</excludeArtifactIds>
</configuration>
</execute>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.8.8</version>
</dependency -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.googlecode.objectify</groupId>
<artifactId>objectify</artifactId>
<version>4.0rc2</version>
</dependency>
</dependencies>
</project>
答案 0 :(得分:1)
我终于明白了。
MyProjectTests
)war/WEB-INF/classes
并点击“确定”答案 1 :(得分:0)
在我的工作配置中.classpath文件包含这样的内容......
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
.
.
.
</classpath>
我认为这与个别项目的.classpath
文件有关(如果你有多个项目)。请注意,默认情况下,它不会在linux下显示,您必须从文件菜单打开文件并在地址栏中输入.classpath。