Сократить classpath (-cp) для командной строки - PullRequest
11 голосов
/ 12 марта 2019

Мой maven не работает на плагине jdeps (нам нужно обновить его до jdk11).

Командная строка слишком длинная для windows . Вот ошибка, которую я получаю:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.1.1:jdkinternals (default) on project myproject:
[ERROR] Exit code: 1 - La ligne de commande est trop longue.
[ERROR]
[ERROR] Command line was: cmd.exe /X /C 
"
    "C:\Program Files\Java\jdk-11.0.2\bin\jdeps.exe"
    -cp "
        C:\Users\Me\.m2\repository\com\something\firstJar.jar;
        C:\Users\Me\.m2\repository\com\somethingElse\secondJar.jar;
        C:\Users\Me\.m2\repository\com\somethingDifferent\someOtherJar.jar;
        ... and one more
        ... and another one
        ... I think you get the idea......."
    --multi-release 9 D:\git\myworkspace\myproject\target\classes
"

Для примера я позволю только 3 банкам, но у меня так много зависимостей ...

Как сократить эту командную строку? (и убедиться, что она не зависит от пользователя)

Я не знаю много о Манифесте, здесь я могу что-то сделать?

Manifest-Version: 1.4.0
Class-Path: 

Ограничение : Это общий проект, изменение чего-либо только на моем компьютере не является решением.

Ответы [ 5 ]

4 голосов
/ 19 марта 2019

maven-jdeps-plugin использует plexus-utils , чтобы разветвить дочерний процесс для запуска исполняемого файла jdeps.plexus-utils реализует это путем создания командной строки и передачи ее в cmd.exe.Это неправильный подход, так как он будет зависеть от ограничения 8192 символов, наложенного cmd.exe.Правильный подход заключается в использовании API Java ProcessBuilder.Это само по себе использует метод API ProcessImpl.create, который в Windows реализуется с помощью вызова API Win32 CreateProcess.Последний API имеет ограничение в 32 тыс. Символов, которого должно быть достаточно для большинства случаев использования.

Для этого существует plexus-utils отчет об ошибке .Вы можете также поднять его с помощью maven-jdeps-plugin - API Java ProcessBuilder вполне пригоден для использования, поэтому нет необходимости использовать plexus-utils только для запуска jdeps.

1 голос
/ 22 марта 2019

Если вы используете Windows 10 Anniversary Update, Windows Server 2016 или более позднюю версию, вы можете увеличить максимальную длину пути до значения, превышающего 260 символов по умолчанию.

Вы можете скопировать следующие две строки в файл срасширение .reg и откройте его,

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

Или откройте редактор реестра, перейдите к местоположению и измените значение с 0 на 1.

0 голосов
/ 22 марта 2019

Именно поэтому Maven предназначен для управления большим количеством зависимостей, поскольку вы можете просто поместить их все в файл .pom. Использование централизованного списка зависимостей позволяет Maven видеть почти все, что вам нужно для запуска вашей программы. Посмотрите на этот пост, который делает то, что вы пытаетесь, хотя добавьте каждый из ваших банок для Maven, чтобы увидеть их. Как упаковать и запустить простое приложение командной строки с зависимостями, используя maven?

Кроме того, хорошее руководство по основам .pom Прочтите руководство пользователя pom на www.maven.apache.org.

Maven не будет использовать аргументы cmdline так, как вы пытаетесь из-за спецификаций Manifest. Это основная причина, по которой программисты, включая меня, любят Maven, поэтому он действительно сделает жизнь намного проще, поскольку он создан именно для того, что вам нужно. Когда файлы меняются, у вас есть один файл для ваших обновленных версий.

0 голосов
/ 21 марта 2019

может быть немного дерзкое решение, но ...

как насчет использования переменной env?

set MR=C:\Users\Me\.m2\repository\

"C:\Program Files\Java\jdk-11.0.2\bin\jdeps.exe"
    -cp "
        %MR%\com\something\firstJar.jar;
        %MR%\com\somethingElse\secondJar.jar;

не тестировал, надеюсь, это работает ...

0 голосов
/ 21 марта 2019

Лучше всего создать пустой jar-файл с указанием пути к классам в манифесте.

Официальный документ оракула находится на Добавление классов в путь к классу файла JAR

maven-jar Плагин поддерживает обновление атрибута classpath манифеста: Как добавить Class-Path в файл манифеста с помощью maven

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...