Maven: создать банку из пакета более крупного проекта - PullRequest
0 голосов
/ 23 февраля 2019

В моем maven хотел бы создать jar с единственными скомпилированными классами из пакета org.lory.ejb.commons, как вы можете видеть здесь:

enter image description here

потому что эти классы являются общими для основного проекта ejb и клиентского проекта.Я пытаюсь с плагином maven сборки, где мой дескриптор сборки:

<assembly>
<id>commons</id>
<formats>
    <format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
    <fileSet>
        <directory>${basedir}/target/classes/</directory>
        <outputDirectory>${basedir}/target/</outputDirectory>
        <includes>
            <include>org/lory/ejb/commons/**</include>
        </includes>
    </fileSet>
</fileSets>

И часть моего pom.xml

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <descriptors>
            <descriptor>src/assembly/assembly.xml</descriptor>
        </descriptors>
    </configuration>
</plugin>

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

enter image description here

Какой правильный способ использованияЭто?Спасибо

ОБНОВЛЕНИЕ Это мой общий проект enter image description here

и pom.xml

<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>
<groupId>lory-ejb-commons</groupId>
<artifactId>lory-ejb-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>lory-ejb-commons</name>
<modules>
    <module>lory-ejb</module>
</modules>

Этоpom.xml другого проекта (из которого был удален пакет commons)

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

<parent>
    <groupId>lory-ejb-commons</groupId>
    <artifactId>lory-ejb-commons</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>lory-ejb</artifactId>
<name>lory-ejb</name>
<packaging>jar</packaging>

<dependencies>

    <dependency>
        <groupId>lory-ejb-commons</groupId>
        <artifactId>lory-ejb-commons</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

Но он все равно не работает.После очистки и установки обоих проектов у меня появляется эта ошибка

[ОШИБКА] Не удалось выполнить цель для проекта lory-ejb: Не удалось разрешить зависимости для проекта lory-ejb-commons: lory-ejb: jar: 0.0.1-SNAPSHOT: Не удалось найти артефакт lory-ejb-commons: lory-ejb-commons: jar: 0.0.1-SNAPSHOT -> [Помощь 1]

У ребенкапроект, который я даже не могу импортировать как пакет jons, он просто видит его как каталог, и даже если я могу импортировать классы в исходном коде, компилятор java по-прежнему говорит

import org.lory.ejb.commons.OperationOutcome не может быть решен

enter image description here

1 Ответ

0 голосов
/ 23 февраля 2019

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

Основной способ сделать это в Mavenсоздать родительский проект (проект maven с pom упаковкой);добавьте модуль с именем common, куда вы положите общий код (весь код из вашего пакета org.lory.ejb.commons);и добавьте другие модули client и server, в которые вы помещаете код клиента и сервера соответственно.Оба модуля client и server будут зависеть от common.


Кстати, обратите внимание, что использование модулей также проще, например.используя Eclipse, вы можете просто создать новый проект Maven с упаковкой pom;добавьте в него модули maven (с jar packagin);и переместите код в правый модуль


РЕДАКТИРОВАТЬ Проекты с упаковкой pom не создают файлы JAR при сборке.Вот почему у вас есть ошибка: Не удалось найти артефакт lory-ejb-commons: lory-ejb-commons: jar : 0.0.1-SNAPSHOT .(это потому, что pom проект особенный, он не предназначен для того, чтобы содержать код; поэтому у вас не должно быть кода непосредственно в нем).

Вы должны назвать свой родительский проект, например.lory-ejb-parent, создайте другой модуль с именем common и поместите туда общий код;и модуль lory-ejb зависит от модуля common.

Кроме того, Eclipse автоматически управляет зависимостями между проектами на основе maven, поэтому нет необходимости изменять что-либо в проекте -> Java Build Path

...