Как запустить приложение Spring Boot из другого модуля Maven? - PullRequest
2 голосов
/ 16 июня 2020

У меня есть проект, состоящий из двух модулей.

  • Первый - это Spring Boot REST Web Service
  • А второй - это код, который должен работать с этим сервисом .

Проблема: мне нужно запустить веб-службу из другого модуля из кода.

Конечно, лучший вариант здесь - развернуть службу на каком-то удаленном хосте, но какой есть ли варианты, если я хочу запустить службу на локальном компьютере?

Первой идеей было упаковать служебный модуль, затем скопировать jar во второй модуль с помощью maven-dependency-plugin и запустить его как:

Runtime.getRuntime().exec("java -jar my-rest-service.jar");

Могу ли я запустить приложение Spring Boot прямо из другого модуля? Вызов Application.main() метод что ли?

Ответы [ 2 ]

0 голосов
/ 31 июля 2020

Плагины Spring Boot Maven упаковывают наше приложение как исполняемые JAR-файлы - такой файл нельзя использовать в другом проекте, так как файлы классов помещаются в BOOT-INF/classes.

Для совместного использования классов с другим проектом , лучший подход - создать отдельную банку, содержащую общие классы, а затем сделать ее зависимой от всех модулей, которые на них полагаются. 1006 *

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

и, конечно же, вам нужно добавить зависимость вашего весеннего загрузочного модуля в свой pom, где вы хотите использовать, тогда вы сможете использовать Application.java.

Пожалуйста, проверьте здесь: Использование приложения Spring Boot в качестве зависимости .

0 голосов
/ 16 июня 2020

Вы можете build и install первый модуль в вашем локальном репозитории maven (по умолчанию .m2 папка) как библиотеку jar. Затем вы можете использовать эту библиотеку во втором модуле в качестве зависимости maven.

После этого вы можете запустить свое приложение (второй модуль), как обычно spring-boot запускается - с помощью метода main.


Пример:

Первый модуль - библиотека:

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

    <url>https://example.com/module1</url>

    <groupId>com.example</groupId>
    <artifactId>module1</artifactId>
    <name>module1</name>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>12</java.version>
    </properties>

    <build>
        <finalName>module1</finalName>
        <defaultGoal>install</defaultGoal>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Второй модуль - приложение:

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

    <url>https://example.com/module2</url>

    <groupId>com.example</groupId>
    <artifactId>module2</artifactId>
    <name>module2</name>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <!--packaging>war</packaging-->

    <properties>
        <java.version>12</java.version>
    </properties>

    <build>
        <finalName>module2</finalName>
        <defaultGoal>package</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- com.example -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>module1</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>
...