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

146 天前
 agmtopy
各位大佬,晚上好
目前遇到一个需求是需要将项目中的文件按照不同的配置进行编译,最后编译出不同的可执行 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 功能来编译成指定的可执行文件,这一部分不太了解;

各位大佬,有没有了解过相关的解决方案或者思路,感谢.
1384 次点击
所在节点    程序员
5 条回复
leaves615
146 天前
分模块构建,不同的类放到不同的模块中,通过模块依赖进行管理,打包后各模块生成对应的 jar
qviqvi
146 天前
如果是 maven 项目,可以设置 exclutions 或者 scope
uSy62nMkdH
145 天前
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
145 天前
不太清楚业务场景,不过看描述,我理解应该是 Base 放在主工程中,被引用使用,A 系列和 B 系列分别打自己的 jar 包,根据你的技术栈可以封装成 starter 或者 SPI 服务包,实际需要用的时候,需要用哪个就把哪个包加载进去
agmtopy
145 天前
感谢各位,综合下来采用 1L 的这种设计方案,更好一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053475

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX