#java #spring-boot #junit #bitbucket
#Ява #пружинный ботинок #джунит #битбакет
Вопрос:
Я разрабатываю свое приложение на Java версии 1.8, и, поскольку мой репозиторий находится на bitbucket, он использует конфигурацию Java 11 по умолчанию. Все работает нормально, но когда я пишу интеграционные тесты с использованием платформы Junit Mockito, я получаю исключение в bitbucket при выполнении конвейера. Локально все тесты работают нормально.
Bitbucket по умолчанию выбирает последнюю версию плагина sonar, которая составляет 3.9, и из-за этого я получаю это исключение
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar (default-cli) on project xyz: Execution default-cli of goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar: java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Я пытался следить за изменениями, но ничего не произошло
1) Changed image: maven:3.6.3-jdk-11 To image: maven:3.6.3-jdk-8 in bitbucket-pipeline.yml file. 2) Added jacoco 0.7.9 version (Java 8 compatible) in pom file 3) Added sonar-maven-plugin version 3.6 (tried to downgrade it to be compatible with Java 8) in pom file
Может ли кто-нибудь указать, чего не хватает и в чем может быть проблема. Кроме того, если я хочу изменить конфигурацию образа докера bitucket по умолчанию, как я могу это сделать?
Мой битбакет-конвейер.файл yml
image: maven:3.6.3-jdk-11 #image: maven:3.6.3-jdk-8 clone .... definitions caches sonar: .... steps ... ... script: cd impl mvn -B org.jacoco:jacoco-maven-plugin:prepare-agent verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
Мой Файл Интеграционного Теста
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc @ActiveProfiles("test") @RunWith(SpringRunner.class) public class CountryControllerTest{ @Autowired public MockMvc mockMvc; @Test public void getCountryListTest() throws Exception { mockMvc .perform(MockMvcRequestBuilders.get("/api/countries")) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.data.length()").value(2)) .andExpect(jsonPath("$.data[0].name").value("USA")) .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)); } }
Ошибка возникает только в конвейере bitbucket, а не в локальной разработке
[ERROR] getCountryListTest(com.xyz.controller.CountryControllerTest) Time elapsed: 0.001 s lt;lt;lt; ERROR! java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'MyTokenFilter': Unsatisfied dependency expressed through field 'myRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRepository': Cannot create inner bean '(inner bean)#7675d305' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#12345': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRepository': Cannot create inner bean '(inner bean)#12345' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#12345': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#12345': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] Caused by: java.lang.reflect.InvocationTargetException Caused by: java.lang.NullPointerException
Ответ №1:
Попробуйте Java SE 17. Java SE 8 постепенно прекращается.
Или попробуйте использовать GitHub или GitLab. это должно сработать.
на Github также есть бесплатное приложение под названием ci circle.
это очень просто, как только вы установите it.it это бесплатно для бонуса.
он может автоматически создавать ваши приложения при каждой фиксации.
Комментарии:
1. Переход на Java 11 решил проблему