Android слишком длинное имя файла
Исключение при выполнении командной строки. Не удается запустить программу «C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe» (в каталоге «C: \ Users \ motiver \ helios_workspace \ TimeTracker»): ошибка CreateProcess = 206, имя файла или расширение: слишком долго
Я немного исследовал, но большинство проблем были связаны с DataNucleus при работе над Google App Engine. Но я не использую ничего отдаленно связанного с Google App Engine. Я делаю небольшой проект с Servlet 3.0 на JBOSS 6. Я использую Hibernate 4.1.2 для ORM и RESTEasy, чтобы открыть веб-службу. Я создал файл util, в котором есть метод main (), который в основном удаляет и воссоздает схему. Я запускаю методы main (), когда мне нужна чистая база данных для целей тестирования. Он отлично работал на Tomcat 7, но перестал работать, когда я перешел на JBoss 6.
Приветствуются любые подсказки или решения.
Простого (в пару кликов или простой команды) решения этой проблемы не существует.
- Уменьшите путь к классам
- Используйте каталоги вместо файлов jar
- Используйте упакованные файлы jar, которые содержат все другие jar-файлы, используйте переменную classpath внутри файла манифеста, чтобы указать на другие jar-файлы
- Используйте специальный загрузчик классов, который считывает путь к классам из файла конфигурации.
- Попробуйте использовать один из прикрепленных патчей в документе с отчетом об ошибке
- Используйте собственную оболочку, например. муравей
Обновление : после июля 2014 года есть способ лучше (благодаря ответу @ Brad-Mace ниже :
Если вы создали свой собственный файл сборки вместо использования Project -> Generate Javadocs , вы можете добавить useexternalfile="yes" в задачу Javadoc, которая разработана специально для решения этой проблемы.
У меня была такая же проблема, но вместо этого я использовал netbeans.
Я нашел решение, поэтому делюсь здесь, потому что нигде не нашел этого, поэтому, если у вас есть эта проблема в netbeans, попробуйте следующее:
(имена могут быть отключены, поскольку мои netbeans на португальском) Щелкните правой кнопкой мыши проект> свойства> сборка> компиляция> снимите флажок запускать компиляцию на внешней виртуальной машине.
Это из-за вашего длинного имени каталога проекта, которое в целом дает вам очень длинный CLASSPATH . Либо вам нужно уменьшить количество jar-файлов, добавленных в CLASSPATH (убедитесь, что удаляются только ненужные jar-файлы), либо лучше всего уменьшить каталог проекта и снова импортировать проект. Это уменьшит CLASSPATH . У меня это сработало.
У меня такая же ошибка в студии Android. Мне удалось решить эту проблему, запустив Build Clean Project в среде IDE.
Я получаю указанную ниже ошибку при запуске ant deploy .
Исправлено, запустив перед ним команду " ant clean ".
Правильный ответ из этой ветки был правильным ответом для моего особого случая. Укажите путь к папке ORM для datanucleus, безусловно, уменьшите компиляцию пути java.
Если вы используете Android Studio, попробуйте опцию Invalidate Caches / Restart .. в меню File
Для меня это был неправильный путь JDK. Убедитесь, что у вас правильный путь к файлу JDK.
Файл -> Структура проекта
Я столкнулся с этой проблемой при попытке выполнить запрос JPQL в консоли Hibernate / JPA в IntelliJ 2020.2
Добавление этого в мой .idea / workspace.xml исправило его.
Ошибка:
CreateProcess error=206, The filename or extension is too long
Исправление кода Gradle:
Я использую устаревшую версию плагинов Gradle, и этот плагин решил проблему для меня.
Использование (подробнее см. В источнике):
Фрагмент скрипта сборки для плагинов DSL для Gradle 2.1 и новее
Фрагмент сценария сборки для использования в более старых версиях Gradle или там, где требуется динамическая конфигурация
Ошибка CreateProcess = 206, имя файла или расширение слишком длинное.
Если вы используете инструмент сборки Gradle, а исполняемый файл находится в каталоге build / libs вашего приложения. run.sh -> создайте этот файл в корневом каталоге вашего проекта и скопируйте в него приведенный ниже сценарий, затем перейдите в git bash и введите run.sh, затем введите. Надеюсь это поможет!
Надеюсь это поможет!!
У меня такая же ошибка. Пробовали решения, такие как очистка, восстановление, недействительность кеша, повторный запуск и т. Д., Но ничего не работает.
Я только что создал новую папку с коротким именем и скопировал все файлы (папку приложения, файлы gradle и т. Д.) В новую папку. Открыл приложение в студии Android и работает нормально.
Это происходит из-за того, что DataNucleus иногда перезаписывает аргументы с множеством путей.
Я пытаюсь задать имя для файла, который я создаю. Я просто хочу знать, что какова максимальная длина имени файла в Android ?
есть ли спецификация для имени файла? Могу ли я использовать такие символы, как - или > ?
о персонажах: чтение здесь, выглядит так: - не является зарезервированным символом, поэтому его можно использовать. > однако зарезервирован, поэтому не может использоваться.
о максимальной длине: поскольку я не мог найти ничего конкретного для Android, и поскольку java не ограничивает длину имени файла, с которым он работает (как вы можете видеть здесь), Я бы сказал, что максимальная длина, как наиболее широко используемый предел, который составляет 255 байт.
по-видимому, небезопасно использовать метки более 127 байт на Android. AFAIK, предел 255-это цель, но это WIP. На прошлой неделе я разгромил файловую систему sdcard Galaxy Tab 10.1, когда программное обеспечение для синхронизации музыки сгенерировало имена файлов около 160 символов. Ограничение имен файлов 127 решило проблему. Будьте в безопасности, если не уверены в своем освобождении. придерживайтесь предела 127.
в конкретном случае имен ресурсов, таких как изображения, я обнаружил, что максимальная длина составляет 100 символов, включая расширение. Я проверил это в бета-версии Android Studio 1.2. Я уверен, что в документации Android должно быть что-то об этом.
Я обнаружил, что ' - ' (точка) является стандартом в именовании, как правило. Часто вы увидите специальные символы для создания удобочитаемости, такие как '."Тем не менее, период является константой для отделения имени файла от номенклатуры типов файлов независимо от ОС. Это правило восходит к самым ранним этапам вычислений. То, что молодые пользователи не понимают, насколько жесткими были правила в те ранние годы. Современный протокол, с другой стороны, больше использует предположения, чтобы сократить код, поэтому он занимает меньше места. Так же, как ваш смартфон меньше, чем старый IBM360, так и современный набор инструкций.
конечно, я делаю что-то не так: я git config core.longpaths true и git add . затем git commit . Все прошло хорошо. Но когда я сейчас делаю git status , я получаю список файлов с Filename too long , например,
это довольно просто воспроизвести для меня: просто создайте веб-приложение yeoman с угловым генератором ("Yo angular") и удалите node_modules С .gitignore файл. Затем повторите вышеупомянутые команды git.
что я пропустила?
git имеет ограничение в 4096 символов для имени файла, за исключением windows, когда git скомпилирован с msys. Он использует более старую версию api windows, и есть ограничение в 260 символов для имени файла.
вы можете обойти это, используя другой Git-клиент в windows или set core.longpaths to true как объяснено в других ответах ниже.
вы должны иметь возможность выполнить команду
или добавьте его в один из ваших файлов конфигурации git вручную, чтобы включить эту функцию, как только вы находитесь в поддерживаемой версии git. Похоже, 1.9.0 и после.
Это может помочь :
основное объяснение: этот ответ предлагает не применять такую настройку к глобальной системе (ко всем проектам, избегающим конфигураций --system или --global tag). Эта команда решает проблему, только будучи специфичной для текущего проекта.
создать .gitconfig хранит настройки и добавить
вы можете создать файл в местоположении проекта (не уверен), а также в глобальном местоположении в моем случае местоположение c:Users\
лучшее решение-включить параметр longpath из git.
но работа, которая работает, - удалить node_modules folter из git.
добавить node_modules в новой строке внутри .файла.gitignore После этого нажмите свои модификации.
чтобы быть полностью уверенным, что он вступает в силу сразу после инициализации репозитория, но до извлечения удаленной истории или извлечения файлов, безопаснее использовать его следующим образом:
-C ключ=значение
задайте переменную конфигурации во вновь созданном репозитории; это вступает в силу сразу после инициализации репозитория, но перед извлечением удаленной истории или извлечением файлов. Ключ в том же формат, как и ожидалось git-config1 (напр., ядро.Эол=правда). Если для одного и того же ключа задано несколько значений, то каждое значение будет записано в файл config. Это делает его безопасным для например, чтобы добавить дополнительную выборку refspecs к исходному удаленному.
Я пробовал Android-Studio при выполнении проектов и Tortoise SVN, кажется, что черепаха-svn делает работу в отличие от плагина Android-студии, который является SVN. Я действительно не понимаю, почему, но Tortoise-svn работает, поэтому я думаю, что это может быть ответ.
Короче говоря: временное исправление использует Tortoise Svn вместо использования SVN от Android-Studio.
Максимальная длина пути до 260 символов. См. Максимальную длину пути 260 символов. См. Android Studio. Невозможно открыть файл PNG.
Согласно другой теме, «svn cmd absolute path» работает, но относительный «cd / your / project / path; svn cmd yourproject» doesn't (это «Файловая система Windows» «Проблема»)
Не может запускать программу (каталог IN … / … / yourproject)
Это подтверждает это предположение.
Надеюсь, они изменят его в будущем!
У меня была такая же проблема, и установка Tortoise SVN не решила. Я продолжал фиксировать отдельные каталоги в своем проекте шаг за шагом, пытаясь найти файл / каталог, вызывающий проблему. Мое удивление заключалось в том, что я закончил все совершения, и никаких ошибок не возникло.
Поэтому решение моей проблемы состояло в том, чтобы поэтапно скопировать все мои файлы / каталоги.
Я знаю, что поток немного стар, но здесь есть работа для гуглеров,
Android Studio дает точный адрес папки, которая не может быть выполнена:
Если AS или Microsoft не делают что-то для поддержки имен файлов дольше, чем текущее ограничение, вот несколько способов обхода этого решения:
1- для фиксации данной папки c:\blah-blah с использованием другого svn-клиента, eg. TortoiseSVN eg. TortoiseSVN
2- для перемещения папки проекта ближе к корню диска, например, если ваш проект находится в d:\Development\Android Studio\sources\project x\Version 3\. попытайтесь переместить его ближе к корню, Путем удаления и / или переименования между папками, такими как: d:\dev\as\src\x\v3\. или d:\x\v3\.
3- Я где-то читал, что создание виртуального диска в окнах из последней папки тоже будет работать, например, создать z:\ и назначить его d:\Development\Android Studio\sources\project x\Version 3\ но я Прочитайте где-нибудь еще, что это может не сработать, потому что клиент AS SVN работает с абсолютным путем файлов, так или иначе я сделал работу с параметрами 1 и 2 и никогда не пытался попробовать третий вариант
Ошибка часто возникает, когда слишком много файлов одновременно заносится, и используется клиент командной строки; Поскольку файлы доставляются клиенту в одну строку, линия становится слишком длинной (svn commit file1 file2 …). См. Также фиксация SVN при сбое большого количества файлов в одном коммите (итоговая длина команды svn превышает предел) . Мое решение этой проблемы состояло в том, чтобы снять флажок «Использовать клиент командной строки» в настройках в разделе «Контроль версий – Subversion».
Если вы когда-либо видели эту проблему, это, вероятно, было простым решением для вас. Если вы видели эту ошибку более двух раз, то вы также знаете, что иногда это может быть сложной проблемой.
Будем надеяться, что вы столкнетесь только с набором легких исправлений, но мы подготовим вас к менее простым, гарантированно исправным исправлениям.
Настройка Windows 10 на обработку длинных путей к файлам
Если вы знаете, что будете часто использовать длинные пути к файлам и длинные имена файлов, вам будет проще заставить Windows работать. Нет смысла использовать PowerShell для выполнения работы каждый день.
Есть два способа сделать это. Один предназначен для пользователей Windows 10 Home, а другой — для пользователей Windows 10 Pro или Enterprise. Эти методы могут работать для Windows 8.1 или более ранней версии, но мы не можем гарантировать это.
Параметры для Windows 10 Home
Чтобы Windows 10 Home принимала длинные пути к файлам, нам нужно открыть редактор реестра . Если вы раньше не работали в редакторе реестра, будьте осторожны. Случайное удаление или изменение здесь может помешать работе Windows полностью.
Всегда делайте резервную копию вашего реестра, прежде чем вносить какие-либо изменения. Узнайте все, что вам нужно знать об этом, в нашем окончательном руководстве по резервному копированию и восстановлению реестра Windows.
Открыв редактор реестра и сделав резервную копию, перейдите в папку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem и найдите ключ LongPathsEnabled.
Дважды щелкните LongPathsEnabled. Убедитесь, что в поле Значение данные: номер 1 указан. Нажмите OK, чтобы подтвердить изменения.
Выйдите из редактора реестра, и теперь вы сможете работать с безумными длинными путями к файлам.
Легкое Исправление
Если вам повезет, вы получите ошибку и точно знаете, какое имя файла вызывает проблему. Или, по крайней мере, где найти файл. Может быть, у вас есть имя файла, которое выглядит примерно так:
Понятно, кто в этом случае виновник. Найдите файл в проводнике Windows или в проводнике, как он называется в Windows 10, нажмите один раз на него, нажмите F2, чтобы переименовать его, и измените это глупое имя файла на более разумное. Задача решена.
Почему длина имени файла является проблемой в Windows?
Существует большая история длины файлов, что является проблемой для операционных систем, таких как Windows. Было время, когда вы не могли иметь имена файлов длиннее 8 символов плюс 3-символьное расширение файла. Лучшее, что вы могли сделать, это что-то вроде myresume.doc. Это было ограничение в отношении дизайна файловой системы.
Все стало лучше, когда вышли новые версии Windows. Мы перешли от старой ограниченной файловой системы к так называемой файловой системе новой технологии (NTFS). NTFS привела нас к тому, что имя файла может быть длиной 255 символов, а длина пути к файлу потенциально может достигать 32 767 символов. Так как же мы можем иметь слишком длинные имена файлов?
В Windows есть вещи, известные как системные переменные. Это переменные, от которых зависит функционирование Windows, потому что Windows всегда будет знать, что означают переменные и где они находятся, даже когда мы перемещаем биты и байты повсюду. Системная переменная MAX_PATH — это та, которая ограничивает имена файлов и пути к файлам до 260 символов.
Будучи переменной, вы думаете, мы могли бы изменить это. Нет, мы не должны. Это все равно что выдернуть нитку из свитера. Как только одна системная переменная изменяется, другие системные переменные и зависимые от них компоненты начинают распадаться.
Параметры для Windows 10 Pro или Enterprise
Чтобы позволить Windows 10 Pro или Enterprise использовать длинные пути к файлам, мы будем использовать редактор локальной групповой политики. Это инструмент, который позволяет нам устанавливать политики в отношении работы Windows на компьютере и на уровне пользователей.
Откройте редактор групповой политики, перейдя в меню «Пуск» и набрав gpedit . Лучший результат должен быть Изменить групповую политику. Дважды щелкните по этому.
После открытия редактора групповой политики перейдите к Конфигурация компьютера → Административные шаблоны → Система → Файловая система. Там вы увидите политику включения длинных путей Win32.
Дважды щелкните по нему, чтобы изменить параметр политики. Измените его с «Отключено» на «Включено», затем нажмите кнопку «ОК», чтобы зафиксировать изменение.
Политика может не вступить в силу сразу. Вы можете принудительно обновить групповую политику.
Менее простые исправления
Не всегда легко решить эту проблему. Иногда вы не можете изменить имена файлов или каталогов по любой причине.
Следующие решения помогут вам. Их несложно сделать.
Обратите внимание, что слова каталог и папка являются взаимозаменяемыми. Мы будем использовать «каталог» в будущем. Следующие командлеты PowerShell также можно использовать для файлов.
Возможно, путь к файлу выглядит примерно так:
Этот путь к файлу составляет 280 символов. Поэтому мы не можем скопировать каталог оттуда куда-либо еще с помощью обычного метода копирования-вставки. Мы получаем ошибку Destination Path Too Long.
Давайте предположим, что по какой-то причине мы не можем переименовать каталоги, в которые вложен файл. Что мы делаем?
Когда откроется PowerShell, вы окажетесь в корне своего пользовательского каталога. Продолжайте, предполагая, что C:\Users\guymc — ваш пользовательский каталог.
Каталог с именем This находится в каталоге Documents. Чтобы перейти в каталог Documents, мы используем команду cd Documents .
Вы увидите быстрое изменение текущего каталога на C:\Users\guymc\Documents. Это хорошо. Мы работаем ближе к каталогам, которые облегчат жизнь.
Копирование каталога с использованием Copy-Item
Мы хотим скопировать каталог This и его содержимое в ThatNewFolder. Давайте используем команду PowerShell Copy-Item с параметрами -Destination и -Recurse.
-Destination сообщает PowerShell, где мы хотим, чтобы копия находилась. -Recurse говорит PowerShell скопировать все элементы внутри к месту назначения. Копирование оставляет оригиналы там, где они есть, и делает все новые в месте назначения.
Переместить каталог с помощью Move-Item
Допустим, мы хотим переместить каталог This, а также все каталоги и файлы в нем, в ThatNewFolder. Перемещение не оставляет оригинал на месте.
Мы можем использовать команду PowerShell Move-Item с параметрами -Path и -Destination. -Path определяет элемент, который мы хотим переместить, и -Destination сообщает PowerShell, где мы хотим его получить.
Команда поместит это в ThatNewFolder. Он также будет перемещать все, что находится внутри этого каталога. Move-Item может использоваться для перемещения файлов или каталогов, и он работает независимо от пути к файлу или длины имени файла.
Чтобы убедиться, что это работает, используйте команду cd ThatNewFolder , чтобы войти в ThatNewFolder. Затем используйте команду dir для вывода списка каталогов в ThatNewFolder. Вы увидите, что этот каталог находится там.
Удалить каталог с помощью Remove-Item
Если мы хотим удалить этот каталог и все в нем, мы используем команду Remove-Item.
Командлет Remove-Item обладает некоторой встроенной безопасностью, которая затрудняет удаление каталога с содержимым внутри него. В нашем примере мы знаем, что хотим удалить все, поэтому мы будем использовать параметры -Recurse, чтобы заставить его удалять все внутри, и -Force, чтобы он делал это, не спрашивая нас, уверены ли мы в каждом элементе внутри.
Имейте в виду! Восстановить что-либо удаленное таким образом было бы чрезвычайно сложно.
Вы можете снова использовать команду dir, чтобы убедиться, что она пропала.
Вот и все
Существуют и другие способы обхода длинных имен файлов и путей к файлам, но то, что мы здесь рассмотрели, — это самые простые и эффективные методы.
Читайте также: