Сделать исполняемый файл библиотеки Java - PullRequest
0 голосов
/ 18 января 2019

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

Я использовал maven shade для достижения своей цели, но не смог найти, как настроить его для отправки своих пакетов как в корень jar, так и в каталог BOOT-INF.
Нев любом случае, это правильный окончательный макет ...
Я использую Spring и Spring-boot для серверной части приложения.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                                <resource>META-INF/spring.factories</resource>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <manifestEntries>
                                    <Main-Class>${application.group}.SimProxy</Main-Class>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                        <artifactSet>
                            <excludes>
                                <exclude>${dependency.spring-test.group}:spring-test</exclude>
                                <exclude>${dependency.hamcrest-library.group}:hamcrest-library</exclude>
                                <exclude>${dependency.junit.group}:junit</exclude>
                                <exclude>${dependency.vertx.group}:vertx-core</exclude>
                                <exclude>${dependency.vertx-junit5.group}:vertx-junit5</exclude>
                                <exclude>${dependency.mockito-core.group}:mockito-core</exclude>
                            </excludes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Как я уже сказал, я не уверен в окончательном макете jar, но мои другие пакеты библиотеки скомпилированной области видны в корне jar.
Я ожидаю, что пакеты API также будут установлены в корне jar для использования клиентского API в других проектах.
Спасибо за любую помощь в этом.

1 Ответ

0 голосов
/ 18 января 2019

Вы никогда не должны распространять библиотеку .jar, которая также является исполняемым файлом. Рекомендуется, чтобы это была либо просто библиотека, предлагающая функциональные возможности для запуска сервера (чтобы приложение-потребитель могло запускать сервер), либо автономный исполняемый файл, который не предназначен для импорта.

Я думаю, что вам лучше всего просто разделить .jars или позволить приложению-потребителю запустить сервер.

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