首页 > 解决方案 > 从使用 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 宏所做的事情?

标签: javagradlemakefile

解决方案


好的,我设法构建了一个build.gradle包含一些动态调用的大文件ant.javachttps ://github.com/lindenb/jvarkit/blob/8ef260931025c29942a3231ea876b59e5c2dcc46/build.gradle

到目前为止它工作正常......


推荐阅读