Помилка 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.