Как Spring boot распознает ресурсы stati c в папке target / classes при сборке проекта? - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь собрать приложение React и включить его в свою весеннюю загрузку в качестве ресурса c.

Я скопировал папку реагирующей сборки в target/classes/public моего проекта весенней загрузки, используя maven-antrun-plugin.

Я попробовал оба имени, target/classes/public и target/classes/static.

Это моя структура pj / target / classes после выполнения $mvn package

C:\Users\tlatl\Desktop\pj1\target\classes>tree /F
OS 볼륨에 대한 폴더 경로의 목록입니다.
볼륨 일련 번호는 722D-1A0E입니다.
C:.
│  application.properties
│
├─com
│  └─example
│      └─demo
│          │  DemoApplication.class
│          │
│          ├─controller
│          │      Controller.class
│          │      UrlRestController.class
│          │
│          ├─domain
│          │      Url.class
│          │
│          ├─repository
│          │      UrlRepository.class
│          │
│          └─service
│                  UrlService.class
│
└─public
    │  asset-manifest.json
    │  favicon.ico
    │  index.html
    │  logo192.png
    │  logo512.png
    │  manifest.json
    │  precache-manifest.5260fb84a466ee86d0bc9ba13f9afc09.js
    │  robots.txt
    │  service-worker.js
    │
    └─static
        ├─css
        │      main.500ce7b4.chunk.css
        │      main.500ce7b4.chunk.css.map
        │
        └─js
                2.c878f2b2.chunk.js
                2.c878f2b2.chunk.js.LICENSE
                2.c878f2b2.chunk.js.map
                main.1b913fda.chunk.js
                main.1b913fda.chunk.js.map
                runtime-main.e1737718.js
                runtime-main.e1737718.js.map

Но после того, как я выполню полученный файл jar, localhost: 8080 просто показывает пустую страницу.

В блоге, на который я ссылался, https://blogg.kantega.no/webapp-with-create-react-app-and-spring-boot/, автор сказал:

Приложения Spring Boot могут обслуживать содержимое c, если вы поместите его в каталог classes / publi c файла jar приложения.

Все, что находится в каталоге publi c на пути к классам, используется сервлетом по умолчанию c сервлетом по умолчанию, поэтому для этого не нужно создавать контроллер MVC.

Так что я не установил ни одного контроллера с путем "/". Другие остальные API, которые я установил, хорошо работают через URL.

Почему моя весенняя загрузка не показывает пакет stati c в папке target/classes/public?

Ниже мой pom. xml файл.

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <node.version>v12.3.1</node.version>
        <yarn.version>v1.16.0</yarn.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>

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

            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <version>1.6</version>
                <configuration>
                    <workingDirectory>src/main/frontend</workingDirectory>
                    <installDirectory>target</installDirectory>
                </configuration>
                <executions>
                    <execution>
                        <id>install node and npm</id>
                        <goals>
                            <goal>install-node-and-npm</goal>
                        </goals>
                        <configuration>
                            <nodeVersion>v8.9.4</nodeVersion>
                            <npmVersion>5.6.0</npmVersion>
                        </configuration>
                    </execution>
                    <execution>
                        <id>npm install</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <configuration>
                            <arguments>install</arguments>
                        </configuration>
                    </execution>
                    <execution>
                        <id>npm run build</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <configuration>
                            <arguments>run build</arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-resources</phase>
                        <configuration>
                            <target>
                                <copy todir="${project.build.directory}/classes/public">
                                    <fileset dir="${project.basedir}/src/main/frontend/build"/>
                                </copy>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


        </plugins>
    </build>

</project>

Ответы [ 2 ]

2 голосов
/ 08 января 2020

1. Spring blog высказывание:

Spring Boot автоматически добавит stati c веб-ресурсов, расположенных в любом из следующих каталогов:

  • / META-INF / resources /
  • / resources /
  • / static /
  • / public /

2. Если вы хотите построить фронтенд как часть сборки maven, вы можете проверить пример в my Git Hub repo . Он содержит именно то, что вам нужно

1 голос
/ 08 января 2020

Я бы поместил / скопировал их в src / resources, сборка Maven скопирует их в jar приложения в папке root

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