После Clean перестает работать сборка Maven


(Alex) #1

Изначально если выполнить mvn test, все проходит успешно и дальнейшие проверки тоже нормально ведут себя. Но как только выполняешь комманду Clean, все перестает работать. И только если удалить из проекта JavaSE-1.7 который я так понял ставится автоматом из-за maven-compiler-plugin и заново его включить в проект, то все заработает.

Ошибку компиляции:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mavenName 3.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ org-Framew
ork-A1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ org-Framework-A
1 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 17 source files to D:\Admin\Test1\maven_Framework\target\classe
s
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[3,19] package com.sl.test does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[10,32] cannot find symbol
  symbol: class FunctionalTest
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[20,25] package elements does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[21,25] package elements does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[22,25] package elements does not exist
[INFO] 5 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.078s
[INFO] Finished at: Thu May 15 16:43:56 MSK 2014
[INFO] Final Memory: 12M/29M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
1:compile (default-compile) on project org-Framework-A1: Compilation failure: Co
mpilation failure:
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[3,19] package com.sl.test does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[10,32] cannot find symbol
[ERROR] symbol: class FunctionalTest
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[20,25] package elements does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[21,25] package elements does not exist
[ERROR] /D:/Admin/Test1/maven_Framework/src/main/java/com/sl/pages/LoginPage.jav
a:[22,25] package elements does not exist

POM:

<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>org.Framework_G1</groupId>
  <artifactId>org-Framework-A1</artifactId>
  <version>3.0.1-SNAPSHOT</version>
  <name>mavenName</name>
  <description>mavenDescription</description>
  <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  <profiles>
    <profile>
        <id>BasicTest</id>
        <properties>
            <testcase.groups>com.sl.test</testcase.groups>
        </properties>
    </profile>
      </profiles>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
           <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
      </plugin>
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
  		<artifactId>maven-surefire-plugin</artifactId>
  		<version>2.17</version>
  		<configuration>
        <argLine>-Dfile.encoding=UTF-8</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.8.2</version>
  	</dependency>
  	<dependency>
  		<groupId>org.seleniumhq.selenium</groupId>
  		<artifactId>selenium-java</artifactId>
  		<version>2.41.0</version>
  	</dependency>
  	</dependencies>
</project>

(Sergey Korol) #2

Источник:

Note: Merely setting the target option does not guarantee that your code actually runs on a JRE with the specified version. The pitfall is unintended usage of APIs that only exist in later JREs which would make your code fail at runtime with a linkage error. To avoid this issue, you can either configure the compiler's boot classpath to match the target JRE or use the Animal Sniffer Maven Plugin to verify your code doesn't use unintended APIs.

Вы уверены, что проект настроен на JDK 1.7 + 7.0 LL? Не pom, а именно compiler classpath.


(Александр Таранков) #3

Похоже на неправильную структуру пакетов проекта. Либо на неправильную конфигурацию сборки (pages собирается раньше, чем test). Либо и то и другое.

Причина ошибки в том, что в классе com.sl.pages.LoginPage.java есть ссылка на пакет com.sl.test, который на момент сборки этого класса отсутствует. Почему проявляется после clean, потому что до clean оба пакета лежат в одной структуре директорий и нормально обнаруживаются компилятором.

Для решения проблемы надо больше информации:

  1. Какие зависимости между пакетами com.sl.pages и com.sl.test? Что в них лежит?

(Максим Малунов) #4

Может поможет указание

<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.8.2</version>
                <scope>test</scope>
</dependency>

(Alex) #5

Спасибо огромное joemast (и всем кто ответил). Вообще в com.sl.pages содержатся 3 класса которые обеспечивают работу с браузером:

/src/main/java
com.sl.pages

HomePage - конфиг для запуска webdriver и самой страницы
LoginPage - выполнение авторизации на сайт (этот класс я сделал наследуемым от FunctionalTest поэтому и не работал Clean)
WaitForElement - явные ожидания для элементов

/src/test/java
com.sl.test
FunctionalTest - выполнение теста

Хотел бы тогда уточнить, каким образом Maven определяет, какой из классов запустить первым? (по этой ссылке написано что выполняются изначально все что связанно со словом Test)

Maven при компиляции проходится по всем классам и уже после идет в /src/test/java для выполнения тестов? А на момент компиляции не дойдя до /src/test/java он встречает LoginPage, который ссылается на пакет (com.sl.test), которого еще не существует. Поправьте если я не прав.

P.S. вопрос исчерпан, видимо мне нужно перечитать в книге Java главу про пакеты, наследования и компиляция =)


(Александр Таранков) #6

Почему вообще у тебя классы фреймворка ссылаются на классы тестов? Вот в чём вопрос! Это в корне не верно. Фреймворк никак не должен зависеть от тестов


(Alex) #7

Скорее всего из-за малого опыта в программировании, но после вашего сообщения просмотрел код и LoginPage единственный класс, который ссылается на FunctionalTest.

Вообще изначально (когда только начал изучать автоматизацию и программирование), я посмотрел 2 ролика по примеру Framework (Framework за 20 минут и ролик Баранцева по google). Разбираясь в коде как он устроен я что-то копировал, что-то изменял и переносил. Ну и сейчас вижу, что я перенес класс LoginPage из видео, который являлся тестом, в основной Framework (т.к. мне придется так и так авторизироваться на сайте, чтобы на нем работать). А вообще я строил свой Framework отталкиваясь от основного примерного теста (FunctionalTest). То есть на данный момент реализация теста (в коде только редактирование форм, без проверок) выглядит так:

package com.sl.test;

import org.junit.Test;



import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

import com.elements.pages.AElements;
import com.elements.pages.MenuElements;
import com.sl.pages.HomePage;
import com.sl.pages.LoginPage;
import com.sl.utils.Card;
public class FunctionalTest extends HomePage{ 																			
	
 private AElements elements = PageFactory.initElements(open (), AElements.class); 								
 private String elementMenu;
 
  @Test
  public void promo() throws Exception{
	 
	  elementMenu = "Видеофильмы";
	  MenuElements menu = new MenuElements(driver);
	  Card card = new Card(driver, elementMenu);

	  
	  LoginPage login = new LoginPage("admin", "admin", elements);
//	  JavaScripts js = new JavaScripts(driver);
	  login.testLogin();
	
	  menu.select(elementMenu);
	  elements.addCard.click();
	  
//	  js.hideMenu();  // Скрывает меню, пока не используется после FireFox 29
	  card.editCardFields("Имя", "12345");
	  
//	  card.editCardFields("Описание", "12345");
//	  card.editCardFields("Оригинальное название", "12345");
//	  card.editCardFields("Актеры", "12345");
//	  card.editCardFields("Режиссер", "12345");
//	  card.editCardFields("Номер сезона в сериале", "12345");
//	  card.editCardCheckbox("Не показывать в разделе сериалов", "off");
//	  card.editCardCheckbox("Блокировка прав", "off");
//	  card.editCardCheckbox("Рекомендуемое", "off");
//	  card.editList2List("Жанры сериалов (сезонов)", "WP_Serials_genre","add");
//	  card.editList2List("Плашки", "WP_plashka","delete");
//	  card.editList2List("Жанры сериалов (сезонов)", "","deleteAll");
//	  card.editDropdownList("Уровень доступа", "3+");
//	  card.editDropdownList("Возраст", "6+");
	  card.defaultElements("Fields"); //все не заполненные поля по умолчанию.
	  card.defaultElements("Checkbox");
	  card.defaultElements("Dropdownlist");
	  card.defaultElements("List2list");
	   
//	  card.popup("onMain", "Услуги", "add"); 
//	  card.popup("Скидки", "WP sales", "addService");
//	  card.popup("Начало", "06.05.2014 00:00:00", "edit");
	  
//	  card.popup("Доступность на устройствах", "Для всех", "edit");
//	  card.popup("Невидимая", "on", "edit");
//	  card.popup("onPopup", "Прайс-листы", "add");
//	  popup.popup("Плашки", "WP_plashka", "list2list", "add");
	  
	  
//	  js.showMenu();
	 
}
  
}

Еще раз спасибо, буду исправляться.