V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lchqfnu
V2EX  ›  Java

如何使用 spring-boot-maven 插件配置不同 main 入口?

  •  
  •   lchqfnu · 348 天前 · 984 次点击
    这是一个创建于 348 天前的主题,其中的信息可能已经有所发展或是发生改变。

    chatgpt 告诉我使用<executions>指定多个<execution>配置不同的 mainClass 来实现配置多入口分别构建 jar 包。

    以下是示例:

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.example.MainClass1</mainClass> </configuration> </execution> <execution> <id>second-entry-point</id> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>com.example.MainClass2</mainClass> <classifier>second</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> --------------- 按照以上配置方式,运行报错“Unable to find a single main class from the following candidates”,原因是项目中有两个 main Class. 而无法实现单一项目分开打包,请教有何解决方法? 谢谢!
    7 条回复    2023-05-16 09:19:11 +08:00
    gongshw
        1
    gongshw  
       348 天前   ❤️ 1
    方案一:使用多个子模块

    方案二:在 pom.xml 中使用变量,并在执行 maven 命令时传递
    lchqfnu
        2
    lchqfnu  
    OP
       348 天前
    @gongshw 感谢兄弟!第一个方案有想过,项目不复杂,一旦使用子模块,管理起来显得繁琐。第二个方案,是指的 maven 插件设置不同的 phase 来出发不同配置的 goal 吗?
    crazyweeds
        3
    crazyweeds  
       348 天前   ❤️ 1
    你不好好写,我也不好好写,毕竟我是复制你的,哈哈。
    <properties>
    <mainClass>子模块配置这个<mainClass>
    <properties>


    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.example.MainClass1</mainClass> </configuration> </execution> <execution> <id>second-entry-point</id> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>${mainClss}</mainClass> <classifier>second</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build>
    lchqfnu
        4
    lchqfnu  
    OP
       348 天前
    @crazyweeds 首先,感谢!但是我按你的方式尝试,还是报同样的错误。
    crazyweeds
        5
    crazyweeds  
       348 天前   ❤️ 1
    @lchqfnu 这是 parent 模块

    <build>
    <pluginManagement>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot-dependencies.version}</version>
    <configuration>
    <mainClass>${mainClass}</mainClass>
    <layout>ZIP</layout>
    </configuration>
    <executions>
    <execution>
    <goals>
    <goal>repackage</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </pluginManagement>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
    <skipTests>true</skipTests>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <configuration>
    <skip>true</skip>
    </configuration>
    </plugin>
    </plugins>
    </build>

    这是子模块:

    <properties>
    <mainClass>cloud.pibox.ProxyApplication</mainClass>
    </properties>

    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    gongshw
        6
    gongshw  
       348 天前   ❤️ 1
    @lchqfnu

    pom.xml 中可以使用变量, 比如
    <mainClass>${applicationMainClass}</mainClass>

    然后执行命令是用 -D 传递变量参数:
    maven install -DapplicationMainClass=com.example.MainClass1
    maven install -DapplicationMainClass=com.example.MainClass2

    细节还需要再打磨,比如生成的 jar 文件文件名应该也可以由参数决定
    lchqfnu
        7
    lchqfnu  
    OP
       347 天前
    经过排查,<plugin>下首先要使用<configuration><mainClass>指定一个 main 方法,然后再使用 excutions 增加其他 mainClass 的打包方式。chatgpt 给的解决方案是错的,但稍加修改即可用。

    -----

    结帖,谢谢各位。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   903 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:20 · PVG 06:20 · LAX 15:20 · JFK 18:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.