从使用GNU Make编译Java过渡到gradle [英] Moving from compiling Java with GNU Make to gradle

查看:126
本文介绍了从使用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的一些动态调用:here) to manage the compilation of my tools (much more compact + simplier than an ant/Maven file). Basically I declared a Makefile macro that creates an executable jar using small set of parameters:

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} ))
(...)

The system worked for years without any problem. Now, I'd like to handle more configurations (using more than one jdk, adding special things in some Manifest files ets...) And as far as I understand, gradle would be the best tool to achieve this.

I saw some examples with only one target but it's not clear to me how I could easily transform my Makefile into a gradle file. Can I put all my targets in the same build.gradle file? How can I (and should I?) mimic what I did with my makefile macro?

解决方案

Ok I managed to build a big build.gradle file containing some dynamic calls to ant.javac : https://github.com/lindenb/jvarkit/blob/8ef260931025c29942a3231ea876b59e5c2dcc46/build.gradle

It works fine so far...

这篇关于从使用GNU Make编译Java过渡到gradle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆