当前位置: 首页 > 知识库问答 >
问题:

Spring Boot MVC多模块可执行jar

卜弘文
2023-03-14

结构是

+ parent
    + import
        + web
        + backend

我的父模块将包括微服务的种类,我想从我的父管理什么(依赖什么都使用)等等。在导入/后端有我的批处理业务逻辑,在web中有一个mvc应用程序,从那里我可以开始批处理工作。

在Eclipse中,对我来说一切都很好,我可以从application.java文件启动应用程序,然后应用程序工作。

java -jar application.jar
Kein Hauptmanifestattribut in application.jar
    <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>
<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>

如果您需要进一步的信息,请询问。希望你能帮助我。

非常感谢。

共有1个答案

缪宪
2023-03-14

最后我找到了解决办法。magic关键字是重新打包的,请参见链接http://docs.spring.io/spring-boot/docs/1.1.7.release/maven-plugin/usage.html

因此,我只需要在配置了repackage goal的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文件中,并且可以从控制台启动。

 类似资料:
  • 我有一个多模块maven项目。它的设置是正确的,因为当我运行maven clean install时,它成功地构建了所有模块。Webapp包含我需要在web服务中具备的通用功能,因此我将其作为maven依赖项包含在web服务中。 MavenReactor摘要: Eclipse甚至会将webapp项目到web服务的部署程序集。

  • 问题内容: 伙计们,我的模块中有很多python代码,这些模块位于多个python软件包中,现在我需要创建一个包含所有这些文件的python可执行模块或文件,因此它将在Windows和Linux服务器上运行。有哪些可能的解决方案,以及如何解决? 问题答案: 这就是鸡蛋文件的用途。请阅读以下内容:将python库/应用程序打包为.egg文件有什么好处?

  • 我有一个多模块Maven/Spring Boot(v2.3.3)应用程序,实现如下: 项目和应用程序运行良好,没什么大不了的。“my-api”模块有一个像往常一样运行API的主Spring boot应用程序类。 问题是,最近我添加了“my db”模块来实现MongoDB迁移,以自动化CI部署。“my db”模块还有另一个主要的spring boot应用程序类,这是一个运行迁移过程的独立应用程序,我

  • 我有一个简单的Maven项目,看起来像这个项目视图 有一个主要的pom。xml如下所示: 有两个模块-核心和测试。核心模块pom.xml: 测试模块pom。xml 我想使用核心内部测试的代码。这种依赖性看起来是正确的。该项目已生成,没有错误: 但是,当我在测试中尝试从core导入一个类时,找不到该类。

  • 本文向大家介绍定位和执行Python模块(运行),包括了定位和执行Python模块(运行)的使用技巧和注意事项,需要的朋友参考一下 命令行选项的–m选项搜索给定的模块并将其作为__main__模块执行。Python标准模块中的runpy模块在内部支持此机制,该脚本允许使用Python模块命名空间而不是文件系统来定位脚本。 该模块定义了两个功能 run_module() 该函数执行指定模块的代码,并

  • 现在反应堆的建造顺序是 另外module2依赖于module1和module3依赖于module2,现在为了解释依赖关系,我使用${project.version}指定module2 pom中的module1版本,类似地,我使用module3 pom中的${project.version}引用module2。现在快照作业成功执行,但是当我尝试使用聚合器pom(它是所有模块的父pom)释放所有模块时