Java 如何在gradle上强制使用gradlew?

Java 如何在gradle上强制使用gradlew?,java,gradle,Java,Gradle,如果我在我的系统上安装了gradle,并且使用gradle包装器的项目foo,我发现我可以使用gradle命令或gradlew包装器调用构建 假设系统上安装的gradle是版本2.2.1,gradle包装器被设置为使用gradle版本1.9,如果调用系统gradle会发生什么?构建会使用gradle 2.2.1还是包装器指定的1.9运行?gradle如何处理系统上安装的版本与包装器指定的版本之间的冲突?如果使用gradle而不是gradlew调用生成,是否有方法使生成失败?没有内置的方法在gra

如果我在我的系统上安装了gradle,并且使用gradle包装器的项目
foo
,我发现我可以使用
gradle
命令或
gradlew
包装器调用构建


假设系统上安装的gradle是版本2.2.1,gradle包装器被设置为使用gradle版本1.9,如果调用系统
gradle
会发生什么?构建会使用gradle 2.2.1还是包装器指定的1.9运行?gradle如何处理系统上安装的版本与包装器指定的版本之间的冲突?如果使用
gradle
而不是
gradlew
调用生成,是否有方法使生成失败?

没有内置的方法在
gradle
上强制执行
gradlew
。一个常见的解决方案是告诉/记录每个人都应该使用
gradlew
,并且没有人应该手动安装Gradle。根据我的经验,这很有效(如果不需要,为什么要安装一些东西)。需要/想要本地Gradle安装的超级用户通常会很快发现是否有错误。

是否有任何特殊的环境变量或jvm系统属性只有在调用
gradlew
时才会出现,而
build.Gradle
可以检查并退出jvm,如果出现错误,则打印错误消息不是吗?你必须检查脚本,但要记住它可能会随着时间的推移而改变。或者,您可以自定义脚本,比如设置您自己的env var。也许gradle团队可以将
-DinvokedFromGradlew=true
添加到生成的包装器脚本中,然后很容易执行此检查并使构建失败。我认为使用
gradlew
强制执行是值得的,而且由于人为错误而可能出现错误的事情也少了一件。一个选项是修改包装器脚本,将这样的系统属性指定为JVM参数。