Различное поведение подпроекта между Windows 10 и Linux (gradle 2.2.1 и 5.2.1)

#gradle

#gradle

Вопрос:

У меня есть структура из нескольких проектов с десятками родственных проектов с различными подпроектами, что-то вроде этого:

 master/
proja/
 |-- projaEAR
 |-- projaJAR
projb/
 |-- projb
 |-- projbhelper
etc/
  

В конечном счете, я хочу динамически генерировать проекты в settings.gradle . Однако у меня возникли проблемы с Windows. Выдает эту ошибку:

 java.io.IOException: The filename, directory name, or volume label syntax is incorrect
  

При использовании моей текущей gradle установки (версия 2.1) ошибка возникает из GfFileUtils.java :

 Caused by: java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at org.gradle.util.GFileUtils.canonicalise(GFileUtils.java:222)
  

Вот моя настройка:

 C:TEMPgradle_testmaster>dir /b /ad /s ..
C:TEMPgradle_testfoo
C:TEMPgradle_testmaster
C:TEMPgradle_testfoofoo
C:TEMPgradle_testfooproja
C:TEMPgradle_testfooprojb
C:TEMPgradle_testmaster>type settings.gradle
includeFlat "foo:foo", "foo:proja", "foo:projb"
C:TEMPgradle_testmaster>gradle -s projects

FAILURE: Build failed with an exception.

* Where:
Settings file 'C:TEMPgradle_testmastersettings.gradle' line: 1

* What went wrong:
A problem occurred evaluating settings 'master'.
> java.io.IOException: The filename, directory name, or volume label syntax is incorrect

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating settings 'master'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
<snip>
        ... 45 more
Caused by: java.io.IOException: The filename, directory name, or volume label syntax is incorrect
        at org.gradle.util.GFileUtils.canonicalise(GFileUtils.java:222)
        ... 54 more
  

Если я использую более новый gradle (v5.2.1), проблема возникает откуда-то еще:

 C:TEMPgradle_testmaster>c:appsgradle-5.2.1bingradle -s projects

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':foo:foo'.
> The project name 'foo:foo' must not contain any of the following characters: [/, , :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/5.2.1/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':foo:foo'.
<snip>
Caused by: org.gradle.api.InvalidUserDataException: The project name 'foo:foo' must not contain any of the following characters: [/, , :, <, >, ", ?, *, |]. Set the 'rootProject.name' or adjust the 'include' statement (see https://docs.gradle.org/5.2.1/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang.String[]) for more details).
        at org.gradle.util.NameValidator.newInvalidUserDataException(NameValidator.java:45)
        at org.gradle.util.NameValidator.validate(NameValidator.java:38)
        at org.gradle.api.internal.project.ProjectFactory$1.execute(ProjectFactory.java:62)
        at org.gradle.api.internal.project.ProjectFactory$1.execute(ProjectFactory.java:59)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
        at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
        at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
        at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
        at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
        at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
        at com.sun.proxy.$Proxy30.beforeEvaluate(Unknown Source)
        at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyBeforeEvaluate.run(LifecycleProjectEvaluator.java:157)
        ... 112 more
  

Та же простая настройка отлично работает в Linux:

 [tomcat@cskpcloudxn2133 master]$ find .. -type d
..
../foo
../foo/proja
../foo/foo
../foo/projb
../master
[tomcat@cskpcloudxn2133 master]$ cat settings.gradle
includeFlat "foo:foo", "foo:proja", "foo:projb"
[tomcat@cskpcloudxn2133 master]$ /apps/gradle-2.2.1/bin/gradle projects
:projects

------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'master'
 --- Project ':foo:foo'
 --- Project ':foo:proja'
--- Project ':foo:projb'

To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :foo:foo:tasks

BUILD SUCCESSFUL

Total time: 3.488 secs
  

Любые предложения, с благодарностью!

Примечание: перекрестная публикация на форуме Gradle