Java Can';t运行包含许多项目的maven测试

Java Can';t运行包含许多项目的maven测试,java,eclipse,maven,junit,Java,Eclipse,Maven,Junit,我有很多java项目,每个项目都有maven构建。它们都安装很好 此外,我还有许多JUnit测试。这些测试可能依赖于其他项目,即来自项目a的测试可能会从项目B导入类 我的项目结构不好(所有的类都在src目录中,而不是src/main/java)。因此,当我运行mvn clean test时,没有要编译的源代码。如果我通过将所有的主类移动到src/main/java并将所有的测试移动到src/test/java来构建它,那么我会不断得到找不到symbol(引用不同项目中的类导入) 我尝试定义,使用

我有很多java项目,每个项目都有maven构建。它们都
安装
很好

此外,我还有许多JUnit测试。这些测试可能依赖于其他项目,即来自
项目a
的测试可能会从
项目B
导入类

我的项目结构不好(所有的类都在
src
目录中,而不是
src/main/java
)。因此,当我运行
mvn clean test
时,
没有要编译的源代码。如果我通过将所有的主类移动到
src/main/java
并将所有的测试移动到
src/test/java
来构建它,那么我会不断得到
找不到symbol
(引用不同项目中的类导入)

我尝试定义
,使用了许多不同的
插件和
配置文件
,还尝试将我的java
配置
级别降低到1.7,但都没有效果

我甚至尝试过定义一个测试项目,它有一个包含许多模块的简单POM(要么只包含
,要么定义
,或者两者都包含),但即使在这种情况下-要么我没有要编译的
源代码,
找不到符号
,要么甚至
包x.y不存在
(或者它进行编译,但试图将其包含在其他项目中却没有任何效果)


我可以运行一个包含其他项目类的测试吗?如何运行?

也许您可以拥有和使用测试依赖项。我将解释如何实现这一点,希望它对您的项目有用

我有一个包含许多子项目(名为projectA、projectB等)的项目,每个子项目都有自己的测试。还有一个名为“core”的项目,带有包含公共类的jar打包。它们看起来像以下结构:

Main 
   |- core (jar)
   |- projectA (war)
   |- projectB (war)
不同项目上的所有测试都使用公共代码,这些代码最终放在“核心”项目测试类别上。 这就是我们如何管理maven 3.1.1上的依赖关系

Main也是一个具有自己的pom.xml的项目,仅供参考

Main(pom.xml):


4.0.0
com.mycompany.myproject
我的神器
1
聚甲醛
核心
项目A
项目B
...
在核心项目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>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<parent>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>MyArtifact</artifactId>
  <version>1.0</version>
</parent>
<build>
  <pluginManagement>
    <plugins>
    <!-- Common test classes jar creation -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...

4.0.0
核心
罐子
com.mycompany.myproject
我的神器
1
org.apache.maven.plugins
maven jar插件
2.5
试验罐
...
在其余的pom.xml项目中,我们将依赖项放在这个jar中:

<dependencies>
    <!-- We put dependency with core.jar an test-core.jar -->
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

com.mycompany.myproject
核心
1
com.mycompany.myproject
核心
1
试验罐
测试
Eclipse警告此maven依赖关系,但它在使用maven从命令行运行测试时起作用


希望这有帮助。

也许您可以拥有和使用测试依赖项。我将解释如何实现这一点,希望它对您的项目有用

我有一个包含许多子项目(名为projectA、projectB等)的项目,每个子项目都有自己的测试。还有一个名为“core”的项目,带有包含公共类的jar打包。它们看起来像以下结构:

Main 
   |- core (jar)
   |- projectA (war)
   |- projectB (war)
不同项目上的所有测试都使用公共代码,这些代码最终放在“核心”项目测试类别上。 这就是我们如何管理maven 3.1.1上的依赖关系

Main也是一个具有自己的pom.xml的项目,仅供参考

Main(pom.xml):


4.0.0
com.mycompany.myproject
我的神器
1
聚甲醛
核心
项目A
项目B
...
在核心项目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>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<parent>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>MyArtifact</artifactId>
  <version>1.0</version>
</parent>
<build>
  <pluginManagement>
    <plugins>
    <!-- Common test classes jar creation -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...

4.0.0
核心
罐子
com.mycompany.myproject
我的神器
1
org.apache.maven.plugins
maven jar插件
2.5
试验罐
...
在其余的pom.xml项目中,我们将依赖项放在这个jar中:

<dependencies>
    <!-- We put dependency with core.jar an test-core.jar -->
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

com.mycompany.myproject
核心
1
com.mycompany.myproject
核心
1
试验罐
测试
Eclipse警告此maven依赖关系,但它在使用maven从命令行运行测试时起作用


希望这能有所帮助。

你能发布一个包含测试的项目的pom和测试所依赖的项目的pom吗?这会让事情变得更清楚。你需要依赖于不同模块的测试类或源类吗?你能发布一个包含测试的项目的pom和测试所依赖的项目的pom吗?这会让事情变得更清楚。你需要依赖不同模块的测试类还是源类?Ran,你试过我的aproach吗?它适合你的需要吗?我明天会试一下,但告诉我-从你的结构来看,你似乎在Main下有项目核心、projctA和projectB。Main是一个项目,还是只是为了向我展示?这是正确的。Main也是一个有自己pom.cml的项目。我会更新我的答案以包含它。Ran,你试过我的aproach吗?它适合你的需要吗?我明天会试一下,但告诉我-从你的结构来看,似乎你在Main下有项目核心、项目JCTA和项目B。Main是一个项目,还是只是为了展示给我看?没错。Main也是一个有自己的项目拥有pom.cml。我会更新我的答案以包含它。