перепаковка не удалась: невозможно найти основной класс при создании библиотеки с использованием Spring-Boot-Starter-Parent версии 2.1.2.RELEASE - PullRequest
0 голосов
/ 11 февраля 2019

Я создал пример сервера ресурсов в Spring Security с библиотекой, которая содержит WebSecurityConfigurerAdapter.Когда я обновляю родительский spring-boot-starter-parent в pom для библиотеки с 2.0.8 до 2.1.2, а также spring-boot-maven-plugin, я получаю страшную repackage failed: Unable to find main class версию 2.0.8 spring-boot-starter-parent, не имеющую этоговопрос.

Обновление: это происходит после выполнения чистой компиляции mvn.Версию кода с родителем 2.0.8 можно найти здесь .Просто измените родительский родительский элемент pom.xml с 2.0.8 на 2.1.2.

Моя библиотека pom выглядит следующим образом.

<?xml version="1.0" encoding="UTF-8"?>
<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>com.example.utils.security</groupId>
  <artifactId>resource-config</artifactId>
  <version>1.0.1</version>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>5.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-jose</artifactId>
      <version>5.1.3.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-oauth2-resource-server -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-resource-server</artifactId>
      <version>5.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>5.1.3.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.1.2.RELEASE</version>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
            <configuration>
              <skip>true</skip>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

Класс для определения аннотации.


import com.example.utils.security.resource.autoconfig.ResourceServerConfig;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({ResourceServerConfig.class})
public @interface EnableExampleResourceServer {
}

WebSecurityConfigurerAdapter

package com.example.utils.security.resource.autoconfig;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.PriorityOrdered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
@Order(PriorityOrdered.HIGHEST_PRECEDENCE + 500)
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .anonymous().disable()
                .logout().disable()
                .formLogin().disable()
                .httpBasic().disable()
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS).permitAll()
                .anyRequest().authenticated()
                .and()
                .oauth2ResourceServer().jwt();
    }
}

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

В примечаниях к выпуску описывается, что цель repackage теперь имеет идентификатор , чтобы упростить переопределение выполнения repackage.

Сборка выше немного странная.Если вы не хотите, чтобы произошла переупаковка, почему вы вообще определяете цель?Просто не определяйте цель, и переупаковка не произойдет, поскольку родительский элемент предлагает выполнение по умолчанию, только когда плагин явно определен.

Если вам нужно определить его по другой причине, тогда ссылка выше объясняет, чтоты должен сделать.В настоящее время вы переопределяете второе выполнение цели repackage.

0 голосов
/ 03 июня 2019

Я решил эту проблему, используя maven-compiler-plugin вместо spring-boot-maven-plugin.Тем не менее, нужно выяснить, что заставляет spring-boot-maven-plugin вызывать эту проблему.

Информация о плагине Maven:

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.1</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    </configuration>
    </plugin>
0 голосов
/ 11 февраля 2019

Возможны 2 варианта -

  1. Нет main() метод в проекте ИЛИ

  2. Неправильное расположение исходного каталога.Вы должны использовать директиву sourceSets, чтобы исправить это.ваш исходный каталог должен выглядеть примерно так: src/main/java/your/package.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...