мое приложение Spring Boot (v2.2.0.RELEASE) называется project-service. Я хочу заключить его в контейнер и в процессе заметить, что он не работает вне Eclipse (STS4). Поэтому мне интересно, что мне следует изменить.
Приложение использует небольшую библиотеку, которую я написал, для повторного использования некоторых классов (fscl-core-lib), которая построена через Maven в качестве jar-файла и на данный момент покоится на моем локальноммашина.
path-to-project/fscl-core-lib/target/fscl-core-lib-0.2.0.jar
Когда я запускаю приложение из Eclipse (на самом деле STS4), оно работает. Когда я пытаюсь запустить из командной строки, это дает сбой по-разному, независимо от того, что я пытаюсь, все из-за того, что не найти библиотеку.
Я пробовал до сих пор:
1) Зависимость Maven от lib
в project-service / pom.xml:
<dependency>
<groupId>io.fscl</groupId>
<artifactId>fscl-core-lib</artifactId>
<version>0.2.0</version>
</dependency>
это выполняется в STS4, но не работает на CLI с:
[ERROR] Failed to execute goal on project project-service: Could not resolve dependencies for project io.fscl:project-service:jar:0.2.0: Failure to find io.fscl:fscl-core-lib:jar:0.2.0 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]
2) Скажите Maven, где найти библиотеку jar
<repositories>
<repository>
<id>fscl-core-lib</id>
<url>file://path-to-project/fscl-core-lib/target</url>
</repository>
</repositories>
...
<dependency>
<groupId>io.fscl</groupId>
<artifactId>fscl-core-lib</artifactId>
<version>0.2.0</version>
</dependency>
Thisработает в STS4, но не работает в CLI с:
[ERROR] Failed to execute goal on project project-service: Could not resolve dependencies for project io.fscl:project-service:jar:0.2.0: Failure to find io.fscl:fscl-core-lib:jar:0.2.0 in file:///path-to-project/fscl-core-lib/target was cached in the local repository, resolution will not be reattempted until the update interval of fscl-core-lib has elapsed or updates are forced -> [Help 1]
, поэтому он идет в локальный репозиторий, но, похоже, ожидает другое имя файла. Как определить имя файла, создаваемого процессом сборки lib, и каким оно должно быть?
3) В качестве последнего средства включите jar в путь к классу
В STS4 для службы проекта Project -> Properties -> Java Build Path --> Библиотеки -> Добавить внешние JAR-файлы ..., затем выбрать path-to-project/fscl-core-lib/target/fscl-core-lib-0.2.0.jar
Это выполняется в STS4, но завершается неудачно с ошибками компилятора в CLI, поскольку ничего не находит в пакетах libs.
java.lang.NoClassDefFoundError: fscl/core/FSCLEntity
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_131]
Я искал в сети вверх и вниз, чтобы найти эти три подхода, и в настоящее время у меня нет ума. Это должно быть что-то совершенно очевидное, или я вообще следую за каким-то совершенно неправильным подходом?
Любые советы приветствуются.
Для справки, вот pom.xml библиотеки:
fscl-core-lib / pom.xml
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.fscl</groupId>
<artifactId>fscl-core-lib</artifactId>
<version>0.2.0</version>
<name>fscl-core-lib</name>
<description>Library with cross-service reusable classes for FSCL system.</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
Ипроект приложения-службы / pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.fscl</groupId>
<artifactId>project-service</artifactId>
<version>0.2.0</version>
<name>project-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>fscl-core-lib</id>
<url>file://path-to-project/fscl-core-lib/target</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
<dependency>
<groupId>io.fscl</groupId>
<artifactId>fscl-core-lib</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>de.bechte.junit</groupId>
<artifactId>junit-hierarchicalcontextrunner</artifactId>
<version>4.12.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons-core</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>