java - 从使用 GNU Make 编译 Java 到 gradle
问题描述
我有一个项目生成许多(>100)小型 Java 工具。
多年来,我一直使用GNU Makefile(参见此处)来管理我的工具的编译(比 ant/Maven 文件更紧凑 + 更简单)。基本上我声明了一个Makefile 宏,它使用一小组参数创建一个可执行的 jar:
define compile-htsjdk-cmd
$(1) : ${htsjdk.jars} \
$(addsuffix .java,$(addprefix ${src.dir}/,$(subst .,/,$(2)))) \
$(3)
(...)
${JAVAC} \
-d ${tmp.dir} \
-g -classpath "$$(subst $$(SPACE),:,$$(filter %.jar,$$^))" \
-sourcepath ${src.dir}:${generated.dir}/java $$(filter %.java,$$^)
(...)
${JAR} cfm ${dist.dir}/$(1)$(if ${standalone},-fat).jar ${tmp.mft} -C ${tmp.dir} .
(...)
endef
$(eval $(call compile-htsjdk-cmd,referencetovcf,${jvarkit.package}.tools.misc.ReferenceToVCF,${jcommander.jar}))
$(eval $(call compile-htsjdk-cmd,sam2json,${jvarkit.package}.tools.misc.SamToJson,${jcommander.jar} ${gson.jar} ))
$(eval $(call compile-htsjdk-cmd,sam2psl,${jvarkit.package}.tools.misc.SamToPsl,${jcommander.jar} ))
$(eval $(call compile-htsjdk-cmd,sam2tsv,${jvarkit.package}.tools.sam2tsv.Sam2Tsv,${jcommander.jar} ))
(...)
该系统运行多年,没有任何问题。现在,我想处理更多的配置(使用多个 jdk,在一些 Manifest 文件中添加特殊的东西……)据我所知,gradle将是实现这一目标的最佳工具。
我看到了一些只有一个目标的示例,但我不清楚如何轻松地将 Makefile 转换为 gradle 文件。我可以将所有目标放在同一个build.gradle文件中吗?我怎样才能(我应该?)模仿我对 makefile 宏所做的事情?
解决方案
好的,我设法构建了一个build.gradle
包含一些动态调用的大文件ant.javac
:https ://github.com/lindenb/jvarkit/blob/8ef260931025c29942a3231ea876b59e5c2dcc46/build.gradle
到目前为止它工作正常......