Eclipse测试运行查找不同于构建的目录中的类放置它们

时间:2013-11-28 14:44:16

标签: java eclipse google-app-engine maven objectify

我最近从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>

2 个答案:

答案 0 :(得分:1)

我终于明白了。

  • 转到“运行配置...”
  • 选择目标(例如MyProjectTests
  • 选择“Classpath”标签
  • 选择“用户条目”
  • 点击“高级...”按钮
  • 选择“添加文件夹”
  • 浏览到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。