Ошибка компиляции Maven: не удается найти символ

На самом деле не знал, что по-другому поставить в качестве заголовка вопроса ...

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

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

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

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

<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

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

4 голоса | спросил BojanSM 13 PM00000030000003031 2015, 15:00:30

1 ответ


0

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

Чтобы также добавить зависимость от тестовых классов, вам нужно явно указать ее , указав тип как test-jar в разделе зависимостей. Это должна быть зависимость, определенная в 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>

Также неплохо бы убедиться, что testMar сгенерирован SecondModule. В противном случае любой, кому нужно будет скомпилировать ThirdModule, также должен скомпилировать SecondModule. По умолчанию maven не упаковывает тестовые классы в jar. Чтобы заставить 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>
ответил Joydip Datta 13 PM00000030000002231 2015, 15:18:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132