Nano Hash - криптовалюты, майнинг, программирование

недопустимое поле заголовка (в манифесте?) при создании JAR

Я опытный разработчик, но с очень небольшим опытом работы с Java. На моей работе я унаследовал небольшой проект JNLP, который должен работать вне песочницы (all-permissions). Я так понимаю, что с JDK 1.7.0_51 теперь нам также нужно указать «Permissions: all-permissions» в манифесте.

До сих пор мы создавали его с помощью DrJava, но в меню DrJava Проект | Создать файл Jar из проекта, флажок Пользовательский манифест неактивен (недоступен). Следовательно, я впервые пытаюсь создать JAR из командной строки.

Я поместил следующее в файл с именем «manifest.txt»:

Permissions: all-permissions
Main-class: main

(Я считаю, что Main-class: main необходим, и что DrJava до сих пор неявно делал это для меня.) И да, у меня есть новая строка после последней строки.

Когда я пытаюсь создать JAR с помощью командной строки в соответствии с...

jar -cvfm foo.jar manifest.txt main.class UUID.class etc.class

... Я получаю следующее исключение:

java.io.IOException: invalid header field
    at java.util.jar.Attributes.read(Attributes.java:389)
    at java.util.jar.Manifest.read(Manifest.java:182)
    at java.util.jar.Manifest.<init>(Manifest.java:52)
    at sun.tools.jar.Main.run(Main.java:151)
    at sun.tools.jar.Main.main(Main.java:1149)

Я работаю на Microsoft Windows 7, как бы мало это ни стоило. Кроме того, я видел в Интернете примеры с 'cvfm' и '-cvfm'. Я пробовал оба, это, кажется, не имеет значения.

Я предполагаю, что проблема в моем файле manifest.txt, и я прочитал http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html, но я не вижу, что я делаю неправильно.

Я был бы совершенно доволен либо решением DrJava, либо решением командной строки.

09.04.2014

  • Обычно вы получаете это, потому что ваши флаги f и m переключаются, но это не относится к тому, что у вас выше. 09.04.2014
  • Ага. Я подозреваю, что с этим файлом манифеста на самом деле что-то не так, но, поскольку это первый файл, который я написал, я немного растерялся. 10.04.2014

Ответы:


1

Понятно. Оказывается, когда вы устанавливаете JDK 1.7.0_51 (или, по крайней мере, когда я это сделал), он не обновляет системный путь. Вы должны отредактировать это вручную. Итак, я действительно запускал JAR JDK 1.6.1_25, а не 1.7.0_51, и я предполагаю, что «Разрешения» в манифесте не известны JDK 1.6.1_25. Не самое понятное сообщение об ошибке, и гугление не привело к ответу. Я надеюсь, что это поможет кому-то еще: если «Разрешения» есть в вашем манифесте, то «недопустимое поле заголовка» может означать, что ваш путь указывает на слишком старую версию JDK.

17.04.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..