Maven - Обмен библиотеками между проектами - PullRequest
5 голосов
/ 01 июня 2011

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

/myProj
 |_______projA (jar)
 |          |____pom.xml
 |          |____target/jar files
 |_______projB (war)
 |          |___pom.xml
 |          |___web-inf/lib/jarfiles
 |_______projEar 
 |          |___pom.xml
 |___pom.xml

То, чего я хочу добиться, - это заставить projA и projB читать их зависимости из общей общей папки, вместо того, чтобы хранить их собственную копию.

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

Я пытался объявить зависимости от родительского pom, объявить зависимости как и некоторые другие вещи, но пока я этого не достиг.

Есть ли простой способ достичь этого? Любой простой плагин Maven?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

Вы должны быть в состоянии сделать это, добавив JAR в качестве зависимости к вашему EAR pom.xml:

<dependencies>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>myapp-web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>myapp-utils</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>jar</type>
    </dependency>
</dependencies>

... и указание зависимости, как указано в ваших WAR'ах pom.xml:

    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>myapp-utils</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>

Если Maven / другие инструменты уже скопировали JAR в ваш каталог WEB-INF/lib, вам может потребоваться удалить файл вручную перед сборкой. Это должно привести к EAR вида:

META-INF/MANIFEST.MF
lib/myapp-utils-0.0.1-SNAPSHOT.jar
META-INF/application.xml
myapp-web.war
3 голосов
/ 02 июня 2011

Когда вы переходите в Maven, вы не должны хранить JAR-файлы зависимостей в своей базе кода. Я бы предложил вам создать центральный репозиторий Maven, который будет содержать все зависимости.

См. mvn install , чтобы сначала установить эти артефакты в локальный репозиторий. Кроме того, вы можете обратиться к центральному репозиторию maven , чтобы получить артефакты во время строительства.

Что вам нужно сделать, это: удалить все jar-файлы зависимостей из исходного кода и все их зависимости в pom.xml. Они будут загружаться и упаковываться из центрального хранилища maven по мере необходимости. Установите Область зависимостей артефактов соответственно.

...