LINUX.ORG.RU

Maven, не понимаю как сделать тривиальную сборку проекта

 ,


0

1

Добрый день! Есть проект, поделен на три модуля

parent
  --core
  --processing (psvm Main([])) и core используется в нем как зависимость
Зависимости прописаны в pom-е parent. Сборка происходила в идее и мне хватало, достаточно было install core + package processing, сейчас проект нужно отдать и требуют скрипт сборки, что бы раз - и все готово. Собирается все с помощью assembly плагина, все зависимости упакованы в конечный jar. Если из parent - не видит Main из processing. Вопрос - как мне одной командой все собрать? Использовать другие плагины - не проблема, только в итоге должен получится один jar файл.

Ответ на: комментарий от orm-i-auga

Нужно собрать все Одной командой, а не тремя. Проблема в этом. И что бы в итоге получился Один jar файл со всеми зависимостями внутри. Сейчас, если собирать проект из parent - java не находит в нем Main class.

matroskin ()

Вот. Идея она отупляет

anonymous ()
Ответ на: комментарий от ya-betmen

parent

<?xml version="1.0" encoding="UTF-8"?>
<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>company.project</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>core</module>
        <module>processing</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring.version>4.1.4.RELEASE</spring.version>
        <slf4j.version>1.7.10</slf4j.version>
        <logback.version>1.1.2</logback.version>
        <HikariCP-java6.version>2.2.5</HikariCP-java6.version>
        <jodatime.version>2.7</jodatime.version>
        <jaxb2.version>2.2.11</jaxb2.version>
        <quartz.version>2.2.1</quartz.version>
        <oracle.version>11.2.0.4</oracle.version>
        <ibmmq.version>6.0.2.2</ibmmq.version>
    </properties>

    <dependencies>

<!--зависимости есть, они определены здесь -->

    </dependencies>

    <build>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>company.project.processing.Main</mainClass>
                            <packageName>company.project.processing</packageName>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeScope>compile</includeScope>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>

    </build>

</project>

core

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>parent</artifactId>
        <groupId>company.project</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>

    <artifactId>core</artifactId>


</project>

processing

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>parent</artifactId>
        <groupId>company.project</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>

    <artifactId>processing</artifactId>

    <dependencies>

        <dependency>
            <groupId>company.project</groupId>
            <artifactId>core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

matroskin ()
Ответ на: комментарий от matroskin

<!--зависимости есть, они определены здесь -->

В этих зависимостях core и processing прописаны? Хотя это неправильно, наверное, будет. Лучше для сборки либо отдельный модуль завести, либо прописать сборку в уже существующий.

orm-i-auga ★★★★★ ()
Последнее исправление: orm-i-auga (всего исправлений: 1)
Ответ на: комментарий от matroskin

Глянул подробнее, зачем зависимости прописаны в parent'е? Лучше их явно в core прописать.

orm-i-auga ★★★★★ ()
Ответ на: комментарий от orm-i-auga

Зависимости пересекаются. Было решено проект поделить на две части - отделить все, что не будет меняться от проекта к проекту (MQ, работа с бд) и бизнес логику.
Как я понимаю - нужно добавить третий модуль у которого в зависимостях будет core, processing и уже в нем определить Main([])?

matroskin ()
Ответ на: комментарий от matroskin

Если processing зависит от core, то зависимости последнего будут притянуты и в processing, поэтому выносить их в parent я не вижу смысла. Или там еще есть модули?

Как я понимаю - нужно добавить третий модуль у которого в зависимостях будет core, processing и уже в нем определить Main([])?

Я для нетривиальных сборок отдельный проект обычно делал. Сборка в паренте — не лучший способ, думаю.

orm-i-auga ★★★★★ ()
Ответ на: комментарий от orm-i-auga

Модулей больше нет.
Сейчас со сборкой я разобрался, все собирается jar плагином, сборка происходит на parent, но есть нюанс - сборка не происходит, если в локальном репозитории не установлен core. Какой goal повесить на core, что бы при mvn package в processing происходила установка core? Уже голова кругом.

matroskin ()
Ответ на: комментарий от matroskin

Я так понимаю мавен сначала будет собирать парент, потом модули. Поэтому сборку лучше в processing перенести.

orm-i-auga ★★★★★ ()
Ответ на: комментарий от orm-i-auga

Сделал. В итоге все собирается такой строкой

mvn --projects core clean install --projects processing package

matroskin ()
Ответ на: комментарий от matroskin

Можешь объяснить чем тебе не угодил mvn clean install на паренте, что ты взялся делать работу мавена вместо него вручную?

ya-betmen ★★★★★ ()
Ответ на: комментарий от matroskin

достаточно в паренте было сделать clean install.

maloi ★★★★★ ()
Ответ на: комментарий от matroskin

должно собираться просто:

mvn clean package

asaw ★★★★★ ()
Ответ на: комментарий от ya-betmen

Каюсь, ты прав. Сейчас достаточно mvn clean package на parent и все готово.

matroskin ()
Ответ на: комментарий от matroskin

Почитай про мавен, что ли, mvn clean package в данном случае соберёт тебе коре, потом процессинг, но т.к. коре в твой локальный репозиторий не попадёт (т.к. именно в этом разница install и package), то процессинг у тебя соберётся со старым коре из локалного репозитория. Тебе нужно именно clean install. Собственно вопрос, почему ты хочешь сделать именно package?

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Только что проверил - при такой конфигурации в репозиторий core вообще не попадает...

matroskin ()
Ответ на: комментарий от ya-betmen

Уже договорился не на single-package, а на jar+lib. Изначально требование старшего.

matroskin ()
Ответ на: комментарий от matroskin

Нифига не понял. Ты делаешь clean install и в локальном репозитории не появляются артефакты?

ya-betmen ★★★★★ ()
Ответ на: комментарий от ya-betmen

Сейчас я делаю так - clean package в parent, в локальном репозитории артефакты не появляются. Все. Сейчас сам думаю о том, как такое возможно.

matroskin ()
Ответ на: комментарий от matroskin

Сейчас я делаю так - clean package в parent, в локальном репозитории артефакты не появляются

Всё нормально, после clean package их там быть и не должно. Ответ на вопрос «почему?» в моей ссылке выше.

ya-betmen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.