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

Java 项目如何实现排除指定文件以及指定文件进行编译

  •  
  •   agmtopy · 3 天前 · 878 次点击
    各位大佬,晚上好
    目前遇到一个需求是需要将项目中的文件按照不同的配置进行编译,最后编译出不同的可执行 jar 或者可执行文件;
    例如项目中有(base.java, A.java <- A1.java, A.java <- A2.java ,B.java <- B1.java),"<-"表示继承自或实现关系,根据配置 A 构建后的 jar 中就只包含(base.class 、A.class 、A1.class, A2.class)、根据配置 B 构建后的 jar 中就只包含(base.class 、B.class 、B1.class);

    目前想到两种解决方案:
    1. Gradle 在编译阶段先读取配置文件,然后在将需要排除的文件通过类似"exclude"的方式进行排除,排除后在进行编译;
    2. 通过 GraalVM 的 native-image 功能来编译成指定的可执行文件,这一部分不太了解;

    各位大佬,有没有了解过相关的解决方案或者思路,感谢.
    5 条回复    2024-06-29 15:48:17 +08:00
    leaves615
        1
    leaves615  
       3 天前
    分模块构建,不同的类放到不同的模块中,通过模块依赖进行管理,打包后各模块生成对应的 jar
    qviqvi
        2
    qviqvi  
       2 天前
    如果是 maven 项目,可以设置 exclutions 或者 scope
    uSy62nMkdH
        3
    uSy62nMkdH  
       2 天前
    1L 正解
    mvn package -Pprd,moduleA OR mvn package -Pprd,moduleB
    <profile>
    <id>moduleA</id>
    <modules>
    <module>module-common</module>
    <module>moduleA-xxx</module>
    </modules>
    </profile>
    <profile>
    <id>moduleB</id>
    <modules>
    <module>module-common</module>
    <module>moduleB-xxx</module>
    </modules>
    </profile>
    cowcomic
        4
    cowcomic  
       2 天前
    不太清楚业务场景,不过看描述,我理解应该是 Base 放在主工程中,被引用使用,A 系列和 B 系列分别打自己的 jar 包,根据你的技术栈可以封装成 starter 或者 SPI 服务包,实际需要用的时候,需要用哪个就把哪个包加载进去
    agmtopy
        5
    agmtopy  
    OP
       2 天前
    感谢各位,综合下来采用 1L 的这种设计方案,更好一点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   963 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:30 · PVG 04:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.