从使用GNU Make编译Java到gradle

时间:2018-11-23 18:20:30

标签: java gradle makefile

我有一个生成许多(> 100个)小型Java工具的项目。

多年来,我一直使用 GNU Makefile (请参阅here)来管理我的工具的编译(比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,在某些清单文件集中添加特殊内容...)据我了解, gradle 将是最好的工具,实现这一目标。

我看到了一些仅具有一个目标的示例,但是我不清楚如何轻松地将Makefile转换为gradle文件。我可以将所有目标都放在同一个 build.gradle 文件中吗?我如何(并且应该?)模仿我对makefile宏所做的操作?

1 个答案:

答案 0 :(得分:0)

好吧,我设法建立了一个很大的build.gradle文件,其中包含对ant.javac的动态调用:https://github.com/lindenb/jvarkit/blob/8ef260931025c29942a3231ea876b59e5c2dcc46/build.gradle

到目前为止效果很好...