Интеграция в модульный проект Maven - PullRequest
0 голосов
/ 23 мая 2018

У меня проблемы с организацией мультимодульных проектов Maven.Я хочу использовать файлы в one child project(B) из других дочерних проектов, которые C, D and E.Ниже описан полный сценарий.

У меня есть родительский проект A и его дочерние проекты B(output jar), C(output pom) и D(output pom).Проект C имеет своих четырех детей (F, G, Example1 and Example2).И у проекта D есть дочерние элементы, которые называются E(output pom).Это выглядит так:

Project A(parent) |-- project B(child1; outputs jar which is my GUI) |-- project C(child2; outputs pom) |-- project F(child of project C, outputs war) |-- project G(child of project C, outputs war) |-- project Example1(child of project C, outputs war) |-- project Example2(child of project C, outputs war) |-- project D(child3; outputs pom) |-- project E(child of project D; outputs pom)

Теперь проект B - это мой GUI проекта, который внутренне использует некоторые файлы из project C, D, E, F. G. Example1 and 2.Во время программирования я могу выполнить файлы из всех проектов в project B.Но проблемы возникают, когда я выпускаю окончательный пакет проекта и использую только jar из project B, потому что я не могу выполнить файлы из других проектов, которые C, D, E, F. G. Example1 and 2.Может ли кто-нибудь помочь мне, как использовать другие проекты?Я новичок в Maven, поэтому я не знаю, как интегрировать файлы между различными дочерними проектами.

1 Ответ

0 голосов
/ 23 мая 2018

Попробуйте следующим образом - надеюсь, что он будет работать

Основная идея заключается в создании FAT баночка project-b с использованием плагина сборки (см. project-b содержание файла pom.xml ниже)

По сути, я создал структуру проекта согласно вашему описанию, а записи в файле pom выглядят следующим образом:

(см. изображение для структуры проекта наконец)

**project-a** pom.xml file content:

 <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>com.test</groupId>
            <artifactId>project-a</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>pom</packaging>
            <modules>
                <module>project-b</module>
                <module>project-c</module>
                <module>project-d</module>
            </modules>
            <build>
                <finalName>project-b</finalName>
                <pluginManagement>
                    <plugins>
                        <!-- Set a compiler level -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>2.3.2</version>
                            <configuration>
                                <source>${jdk.version}</source>
                                <target>${jdk.version}</target>
                            </configuration>
                        </plugin>

                        <!-- test plugin -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.18.1</version>
                        </plugin>

                        <!-- War plugin -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-war-plugin</artifactId>
                            <configuration>
                                <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
                            </configuration>
                        </plugin>

                        <!-- Maven Assembly Plugin -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-assembly-plugin</artifactId>
                            <version>2.4.1</version>
                            <configuration>
                                <!-- get all project dependencies -->
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <!-- MainClass in mainfest make a executable jar -->
                                <archive>
                                    <manifest>
                                        <mainClass>com.test.MainApp</mainClass>
                                    </manifest>
                                </archive>
                            </configuration>
                            <executions>
                                <execution>
                                    <id>make-assembly</id>
                                    <!-- bind to the packaging phase -->
                                    <phase>package</phase>
                                    <goals>
                                        <goal>single</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </project>


        **project-b** pom.xml file content

            <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>com.test</groupId>
                <artifactId>project-a</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </parent>
            <artifactId>project-b</artifactId>
            <properties>
                <jdk.version>1.7</jdk.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.test</groupId>
                    <artifactId>project-c</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                    <type>war</type>
                </dependency>
                <dependency>
                    <groupId>com.test</groupId>
                    <artifactId>project-d</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                    <type>pom</type>
                </dependency>
                <dependency>
                    <groupId>com.test</groupId>
                    <artifactId>project-e</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <!-- Set a compiler level -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                    <!-- test plugin -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                    </plugin>

                    <!-- Maven Assembly Plugin -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <!-- get all project dependencies -->
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                            <!-- MainClass in mainfest make a executable jar -->
                            <archive>
                                <manifest>
                                    <mainClass>com.test.MainApp</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <!-- bind to the packaging phase -->
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </project>

        **project-c** pom.xml file content

            <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>com.test</groupId>
                <artifactId>project-a</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </parent>
            <artifactId>project-c</artifactId>
            <packaging>war</packaging>
            <build>
                <plugins>
                    <!-- Set a compiler level -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>


                    <!-- War plugin -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </project>

    **project-d** pom.xml file content

    <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>com.test</groupId>
        <artifactId>project-a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>project-d</artifactId>
      <packaging>pom</packaging>
      <modules>
        <module>project-e</module>
      </modules>
    </project>

    **project-e** pom.xml file content
    <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>com.test</groupId>
            <artifactId>project-d</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>project-e</artifactId>
        <build>
            <plugins>
                <!-- Set a compiler level -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                </plugin>

                <!-- test plugin -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>



Finally open git bash or cmd from folder project-a and run following maven command

mvn clean install -DskipTests

он сгенерирует толстый jar (project-b-jar-with-dependencies.jar, см. изображение) проекта -b ивывод должен выглядеть примерно так:

[INFO] project-a ......................................... SUCCESS [  1.084 s]
[INFO] project-c ......................................... SUCCESS [  2.525 s]
[INFO] project-d ......................................... SUCCESS [  0.019 s]
[INFO] project-e ......................................... SUCCESS [  1.552 s]
[INFO] project-b ......................................... SUCCESS [  2.873 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.369 s
[INFO] Finished at: 2018-05-23T23:51:25+05:30
[INFO] Final Memory: 22M/172M
[INFO] ------------------------------------------------------------------------

Изображение структуры проекта:

enter image description here

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