Добавить проект весенней загрузки Maven как зависимость от другого проекта (локально) - PullRequest
1 голос
/ 13 марта 2020

Я хочу использовать один проект SB как зависимость в другом проекте - без использования родительского pom и локально. Я сделал это прежде, чем использовать родительский pom и указать модули, но я смотрю на разделение репо и мне нужно добиться того же самого без родительского pom.

Я нашел несколько SO-сообщений, описывающих способы сделать это, но ни один из них, похоже, не работает для меня. Все они включают mvn install артефакт, чтобы он был доступен в локальном репо. И, похоже, это работает для меня, пока это не так.

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

Моя установка - это два пустых проекта start.spring.io (с разными именами).

.
├── test-application
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── example
│           │           └── testapplication
│           │               ├── TestApplication.java
│           │               └── TestClientConfig.java
│           └── resources
│               └── application.properties
│   
└── test-client
    ├── pom.xml
    └── src
        └── main
            ├── java
            │   └── com
            │       └── example
            │           └── testclient
            │               ├── TestClient.java
            │               └── TestClientApplication.java
            └── resources
                └── application.properties

В одном проекте test-client Я определяю новый класс

// TestClient.java

public class TestClient {

    private String value;

    public TestClient(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

Просто некоторый базовый c тестовый класс, который я превращу в bean-компонент в моем потребительском приложении.

Далее я запускаю mvn clean install и проверяю, что он находится в моей папке .m2/repository

enter image description here

А теперь в test-application

//pom.xml

<dependency>
    <groupId>com.example</groupId>
    <artifactId>test-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

Автоматический импорт IntelliJ и все выглядит нормально, без красного.

Далее, внутри нового файла TestClientConfig.java Я начинаю реализацию моего клиента:

enter image description here

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

Он импортирует полное имя пакета, а затем не распознает его: enter image description here

И я не могу добавить оператор импорта.

Так что я застрял в этой точке. Я попытался найти некоторые настройки в IntelliJ, чтобы включить скомпилированный jar в качестве библиотеки или добавить модуль, но на самом деле ничего не работало полностью, и эти параметры казались немного странными.

Вот ссылка на zip: https://drive.google.com/open?id=13XGVzICO_QHn_ihM7NFtK3GobAxeqLYf

1 Ответ

1 голос
/ 14 марта 2020

С модулями Maven IntelliJ IDEA будет разрешать зависимости от источников вместо jar-файлов. С вашей настройкой зависимости разрешаются из jar.

Файлы .class должны находиться в root jar вместо BOOT-INF, если вы хотите зависеть от этого jar в других проектах. Классы находятся в BOOT-INF, поскольку вы используете приложение spring-boot-loader, которое создает исполняемый файл jar .

Этот документ описывает, как обойти проблему:

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

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

Это создаст два jar-файла, один с суффиксом exe c в качестве исполняемого файла jar, а другой - в качестве более типичного файла jar, который мы можем включить в другие проекты.

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