Преобразование обычного проекта Maven в проект Spring Boot - PullRequest
0 голосов
/ 13 сентября 2018

Мой руководитель попросил меня преобразовать старый проект Maven, который у нас был, в проект Spring Boot, чтобы мы могли получить доступ к бэкенду проекта через взаимодействие RESTful (до этого бэкэнд проекта был доступен только через интерфейс консоли).

Итак, сначала я добавил простое приложение Spring Boot в отдельный пакет проекта.После этого я начал расширять pom.xml проекта зависимостями, необходимыми для Spring Boot, и настраивал общую настройку проекта.Теперь я попытался запустить бэкэнд старого проекта, который оказался работающим.Однако простое приложение Spring Boot этого не сделало.

Я сузил проблему до конфликтующей зависимости в "старой" части файла pom.xml:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.6.1</version>
</dependency>

Когда я оставляю этозависимости в файле pom.xml старый бэкэнд работает, но приложение Spring Boot завершается с ошибкой со следующей ошибкой:

WARN: Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)

Если я прокомментирую эту зависимость, приложение Spring будет работать нормально, но старый бэкэнд завершится неудачно.Я использую версию 2.0.4.RELEASE из spring-boot-admin-starter-server.Я думаю, что старая версия пакета журналирования отличается от той, что включена в spring-boot-admin-starter-server.Однако мне как-то нужны обе версии в моем проекте.

Что не возможно:

  • Обновление старых источников, поскольку некоторые из них имеют права сторонней компании

То, что я уже пробовал, но у меня не получилось:

  • Исключить ведение журнала из зависимостей Spring Boot.Это приводит к следующей ошибке:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

  • Я также пытался работать с плагином Shade, как некоторые предлагали из моего веб-исследования.К сожалению, я не смог решить проблему с помощью этого подхода.

У кого-нибудь есть предложения, как решить эту проблему?Я был бы очень признателен.Я не привык решать подобные проблемы.Пожалуйста, извините, если я упускаю что-то очевидное.

-lema

РЕДАКТИРОВАТЬ pom.xml (к сожалению, мне пришлось пропустить его большие части):

<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>

... 

<packaging>jar</packaging>
<description></description>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-boot-admin.version>2.0.2</spring-boot-admin.version>
    <spring-boot-dependencies.version>2.0.4.RELEASE</spring-boot-dependencies.version>

    ...

    <rat.skip>true</rat.skip>
    <log4j-version>2.6.1</log4j-version>
</properties>

<repositories>
    ...
</repositories>

<dependencyManagement>
    <dependencies>
        <!-- Necessary dependency for running Spring Boot without starter parent -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot-dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        ...

    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>${spring-boot-admin.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    ...

    <!-- TODO The version of this dependency lets Spring Boot fail, but is 
        necessary tu run the old backend -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-iostreams</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jul</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.fusesource.jansi</groupId>
        <artifactId>jansi</artifactId>
        <version>1.13</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>

    ...

</dependencies>
<build>
    <defaultGoal>verify</defaultGoal>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            ...
        </plugin>


        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>prepare-config-zip</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptors>
                            <descriptor>${basedir}/src/main/assembly/config.xml</descriptor>
                        </descriptors>
                        <finalName>configs</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                    </configuration>
                </execution>
                <execution>
                    <id>prepare-dist-zip</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptor>src/main/assembly/dist.xml</descriptor>
                        <finalName>...</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <configuration>
                <rules>
                    <requireJavaVersion>
                        <version>1.8</version>
                    </requireJavaVersion>
                </rules>
            </configuration>
        </plugin>

    </plugins>
</build>
<profiles>
    <profile>
        <id>attach-standalone</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <configuration>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>standalone</shadedClassifierName>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>dont-attach-standalone</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <configuration>
                        <!-- Prevent huge shaded artifacts from being deployed to Artifactory -->
                        <outputFile>...</outputFile>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

РЕДАКТИРОВАТЬ: Я только что обнаружил, что если вы удаляете элемент версии внутри конфликтующей зависимости, Spring Boot Application работает, но, к сожалению, серверная часть не работает.

1 Ответ

0 голосов
/ 14 сентября 2018

Итак, я нашел решение, но это, вероятно, не лучший способ сделать это:

Я только что заменил <spring-boot-dependencies.version>2.0.4</spring-boot-dependencies.version> на более старую версию, совместимую с конфликтующей зависимостью ведения журнала, а именно на версию 1.4.7.RELEASE.

Это последняя версия, в которой одновременно работают приложение Spring Boot и серверная часть (это было обнаружено методом проб и ошибок).

В любом случае, большое спасибо за вашу помощь.

Приветствия

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