web-dev-qa-db-ja.com

Spring BootMVCマルチモジュール実行可能jar

Spring Boot1.1.7でビルドしたマルチモジュールプロジェクトがあります

構造は

+ parent
    + import
        + web
        + backend

親モジュールには、マイクロサービスの種類、親から管理したいもの(すべてが使用する依存関係)などが含まれます。インポート/バックエンドにはバッチビジネスロジックがあり、Webにはmvcアプリケーションがあり、そこからバッチジョブを開始できます。

Eclipseでは、すべてが正常に機能します。Application.Javaファイルからアプリケーションを起動すると、アプリケーションが機能します。

実行可能なjarファイルを実行してそのアプリケーションを実行したかったのですが、コンソールから起動しようとすると次のエラーメッセージが表示されます。

Java -jar application.jar
Kein Hauptmanifestattribut in application.jar

Jarは非常に小さい5kbのみ、jarパッケージに3者間依存のjarは見つかりませんでした。

WebモジュールのPomは次のようなものです。

    <project>

        <modelVersion>4.0.0</modelVersion>

        <parent>
            <groupId>at.company.bbsng</groupId>
            <artifactId>bbsng-import</artifactId>
            <version>0.1.0-SNAPSHOT</version>
        </parent>

        <artifactId>bbsng-import-web</artifactId>
        <name>bbsng-import-web</name>
        <packaging>jar</packaging>

        <properties>
            <start-class>at.company.bbsng.dataimport.Application</start-class>
        </properties>


        <dependencies>

             <!-- APPLICATION -->
            <dependency>
                <groupId>at.company.bbsng</groupId>
                <artifactId>bbsng-import-backend</artifactId>
                <version>${parent.version}</version>
            </dependency>

            <!-- SPRING ... -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            ...


        </dependencies>



        <build>

            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>

        </build>

</project>

インポートモジュールのPomは次のとおりです。

<project>

    <parent>
        <groupId>at.company.bbsng</groupId>
        <artifactId>bbsng</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>bbsng-import</artifactId>
    <name>bbsng-import</name>
    <packaging>pom</packaging>

    <modules>
        <module>backend</module>
        <module>web</module>
    </modules>

</project>

そして、親のポンは:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>at.company.bbsng</groupId>
    <artifactId>bbsng</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>bbsng</name>
    <description>BBS Next Generation Application Prototype</description>

    <properties>
        <Java-version>1.8</Java-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.springframework.boot-version>1.1.7.RELEASE</org.springframework.boot-version>
    </properties>

    <modules>
        <!-- <module>backend</module> -->
        <!-- <module>business</module> -->
        <module>import</module>
        <!-- <module>infra</module> -->
        <!-- <module>log</module> -->
        <!-- <module>rest</module> -->
    </modules>

    <dependencyManagement>
        <dependencies>

            <!-- SPRING-BOOT ... -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <type>pom</type>
                <version>${org.springframework.boot-version}</version>
                <scope>import</scope>
            </dependency>

            <!-- JAVAX ... -->
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>1.1.0.Final</version>
            </dependency>

            <!-- COMMONS ... -->

            ...

        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <tagBase>
                        svn://svn.int.company.at/stmlf-repository/prototype/bbsng/tags
                    </tagBase>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${Java-version}</source>
                    <target>${Java-version}</target>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <profiles>
        <profile>
            <id>external</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <excludes>
                            <exclude>**/*custom*</exclude>
                            <exclude>**/custom/*</exclude>
                        </excludes>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>    

</project>

さらに詳しい情報が必要な場合はお問い合わせください。あなたが私を助けてくれることを願っています。

どうもありがとうございました。

13
Michael Hegner

ついに私は解決策を見つけました。魔法のキーワードは再パッケージ化です。リンクを参照してください http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/usage.html

したがって、再パッケージ化の目標で構成されたWebモジュールに必要なのはspring-boot-maven-pluginだけです。

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

次に、すべての依存関係が実行可能なjarファイルにパックされ、コンソールから起動できます。

同じ問題に直面している人々に役立つことを願っています。

23
Michael Hegner