2015-08-13 4 views
3

На самом деле не знает, что иначе говоря, как название вопроса ...Maven ошибка компиляции: не может найти символ

У меня есть 3 Maven модулей. Первый является родительским модулем, и он просто обертывает дочерние модули. Ничего особенного. Во втором модуле у меня есть тестовый класс, который является абстрактным и имеет два метода.

В третьем модуле у меня есть тестовый класс, который наследует абстрактный класс от второго модуля.

Когда я пытаюсь построить это с помощью maven, я получаю ошибку компиляции, в которой говорится, что он не может найти символ, который является абстрактным классом из второго модуля. Что интересно, я не получаю никакой компиляционной ошибки в eclipse.

Это часть ПОМ третьего модуля:

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>SecondModule</artifactId> 
    <version>${project.version}</version> 
</dependency> 



</dependencies> 
    <build> 
    <defaultGoal>install</defaultGoal> 

    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     </plugin> 

     <!-- to generate the MANIFEST-FILE of the bundle --> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Import-Package>*</Import-Package> 
      <Export-Package></Export-Package> 
      <Embed-Dependency>SecondModule</Embed-Dependency> 
      </instructions> 
     </configuration> 
     </plugin> 

    </plugins> 

Это ошибка, я получаю:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project ThirdModule: Compilation failure: Compilation failure: 
[ERROR] D:/workspace/project/ThirdModule/src/test/java/org/rrrrrrr/ssssss/thirdmodule/ConcreteTest.java:[7,56] cannot find symbol 
[ERROR] symbol: class AbstractTest 
[ERROR] location: package org.rrrrrrr.ssssss.secondmodule 

Что мне не хватает?

+0

В чем именно исключение? –

+0

Я разделяю свой тестовый код проекта и помещаю его в другой проект, и ошибка исчезла. –

ответ

4

Тестовые классы (классы внутри src/test) автоматически не добавляются в путь класса при добавлении зависимости. Включены только классы, которые находятся в src/main.

Чтобы добавить зависимость от тестовых классов, необходимо указать его явно , указав тип в качестве тестового баннера в разделе зависимости. Это должно быть зависимость определяется в pom.xml модуля 3.

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>SecondModule</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> <!-- add dependency to test jar --> 
</dependency> 

Это также хорошая идея, чтобы убедиться, что тест-банка генерируется SecondModule. В противном случае любой, кто должен скомпилировать ThirdModule, должен будет также скомпилировать SecondModule. По умолчанию maven не упаковывает тестовые классы в банку. Чтобы сказать maven для этого, добавьте цели: jar и test-jar в maven-jar-plugin. Таким образом будет сформирована как оригинальная банка, так и тестовая банка.

Вот пример pom.xml для второго модуля, который иллюстрирует это.

<project> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
     <execution> 
      <goals> 
      <goal>jar</goal> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
    </build> 
</project> 
+0

Большое спасибо. Работает сейчас. Я не знал, что тестовые классы не добавлены в путь к классу. – BojanSM