Помилка JML: Файл .class виглядає неправильним


0

Це питання спочатку було опубліковано на Переповнення стеку , і мені сказали, що замість цього потрібно розмістити його тут.

Я - асистент, який готує завдання для моїх учнів, щоб вони могли дізнатися про JML та розробити контракт. Я надаю їм 3 файли: RArray.refines-java (специфікація з порожніми JML-твердженнями), RArray.java (клас, який реалізує попередню специфікацію) і TestRArray.java (клас тесту).

Щоб виконати роботу, їм доведеться обчислити 3 команди:

  1. jmlc RArray.refines-java (складання специфікації та реалізації)
  2. javac TestRArray.java (складання тестового класу)
  3. jmlrac TestRArray (перевірка за допомогою перевірки твердості jml)

Для цього, однак, їм доводиться встановлювати JML на комп'ютерах у школі, де, очевидно, ніхто не має доступу root. Спочатку я спробував встановити його, і здається, він не вимагає жодного кореневого доступу - я слідував за цим Французький підручник , з цим zip-файл .

Я спробував на моєму Ubuntu 14.04 ноутбук, він працював чудово, і я зміг керувати деякими результатами для завдання. Навіть у школі, на Fedora, я можу встановити інструменти без будь-яких скарг і додати їх до PATH. Але в школі я стикаюся з помилкою, коли біжу jmlc RArray.refines-java.

Ось моя помилка:

$ jmlc RArray.refines-java
parsing RArray.refines-java
parsing RArray1/RArray.java
typechecking RArray1/RArray.java
The .class file 'java/lang/CharSequence.class' appears to be malformed: Bad constant tag: 18
Fatal error - Unable to find a class for java/lang/CharSequence: error: Cannot find type "java.lang.CharSequence"

Я намагався шукати раніше, і здається, що це може бути дублікатом CLASSPATH, або щось у цих рядках, але я не мав доступу до нього.

Я також спробував знову завантажити файл ZIP, щоб перевірити, чи буде виправлений цей невірний клас, але не пощастило.

Я намагався бігти javac RArray.refines-java, і він компілюється, як передбачається, таким чином, він повинен бути проблемою jml.

Ось результат java -version :

java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

Ось результат jml -version :

Version: Common JML tools release 5.6_rc4 (Mar. 16, 2009)

У вас є ідея, як це виправити? Я сподіваюся, що мені не доведеться відкидати все.

Відповіді:


0

Наскільки я знаю, JML працює тільки на java 1.7

Спробуйте змінити свій проект на java 1.7 і перевірити, чи працює він.

Ось інформація: [1]: http://jmlspecs.sourceforge.net/

@Edit

Я використовую JML з Eclipse, і мені потрібно вибрати Java 7, оскільки він автоматично перейде до 8. Крім того, якщо ви компілюєте простий клас з терміналом, спробуйте наступну команду під час його компіляції:  $ javac -source 1.7 - ціль 1.7


Я боялася за це. Я припустив, що це неможливо зробити без доступу до кореневої системи? Це має бути рішення, мій ноутбук має java 1.7
— Percelot

Ваш проект створено за допомогою Java 7?
— Felipe

читати моє редагування вище
— Felipe

Під час роботи $javac -source 1.7 -target 1.7 RArray.java, У мене є попередження: bootstrap class path not set in conjunction with -source 1.7 1 warning. Як ви використовуєте його з Eclipse? З OpenJML? Я не можу працювати навіть з моїм ноутбуком.
— Percelot

У посиланні вище він дає вам пояснення, як запустити його з затемненням. Так, використовується OpenJML. Ви повинні отримати посилання, яке ви потім додати до плагінів затемнення, як я пам'ятаю. Потім ви створюєте проект з java 1.7 і вмикаєте JML на цьому проекті
— Felipe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.