Используйте «Файл аргумента» на Java 9 +
В Java 9+ исполняемый файл Java поддерживает предоставление аргументов через файл. Увидеть
https://docs.oracle.com/javase/9/tools/java.htm#JSWOR-GUID-4856361B-8BFD-4964-AE84-121F5F6CF111.
Этот механизм явно предназначен для решения проблемы ограничений ОС на длину команд:
Вы можете сократить или упростить команду java с помощью файлов @argument.
указать текстовый файл, содержащий аргументы, такие как параметры и
Имена классов, переданные в команду Java. Это позволит вам создать Java
Команды любой длины в любой операционной системе.
В командной строке используйте префикс at (@) для определения
файл аргументов, содержащий параметры Java и имена классов. Когда
Команда Java встречает файл, начинающийся со знака (@), это
расширяет содержимое этого файла в список аргументов так же, как они
будет указан в командной строке.
Это «правильное» решение, если вы используете версию 9 или выше. Этот механизм просто изменяет способ предоставления аргумента JVM, и поэтому на 100% совместим с любой платформой или приложением , независимо от того, как они выполняют загрузку классов, т.е. это полностью эквивалентно простому предоставлению аргумента в команде линия как обычно. Это не относится к обходным решениям на основе манифеста для этого ограничения ОС.
Примером этого является:
Исходная команда:
java -cp c:\foo\bar.jar;c:\foo\baz.jar
можно переписать как:
java @c:\path\to\cparg
где c:\path\to\cparg
- файл, содержащий:
-cp c:\foo\bar.jar;c:\foo\baz.jar
Этот "файл аргументов" также поддерживает символы продолжения строки и кавычки для правильной обработки пробелов в путях, например
-cp "\
c:\foo\bar.jar;\
c:\foo\baz.jar"
Gradle
Если вы столкнулись с этой проблемой в Gradle, посмотрите этот плагин, который автоматически преобразует ваш путь к классам в «файл аргументов» и предоставляет его JVM при выполнении exec или тестовых задач в Windows. В Linux или других операционных системах по умолчанию он ничего не делает, хотя для применения преобразования независимо от ОС можно использовать дополнительное значение конфигурации.
https://github.com/redocksoft/classpath-to-file-gradle-plugin
(отказ от ответственности: я автор)
См. Также эту связанную проблему Gradle - надеюсь, эта возможность в конечном итоге будет интегрирована в ядро Gradle: https://github.com/gradle/gradle/issues/1989.