Java "константа слишком длинная" ошибка компиляции. Происходит только при использовании Ant, а не при использовании Eclipse

java eclipse ant

73228 просмотра

9 ответа

У меня есть несколько действительно длинных строк в одном классе для инициализации пользовательской информации. Когда я компилирую в Eclipse, я не получаю никаких ошибок или предупреждений, и полученный .jar работает нормально.

Недавно я решил создать файл сборки ant для использования. Всякий раз, когда я компилирую тот же класс с помощью ant, я получаю ошибку компиляции «константа слишком длинная». Я пробовал несколько способов установить исполняемый файл компилятора java в ant, чтобы убедиться, что я использую ту же версию, что и в Eclipse.

Я предпочел бы выяснить, как получить такую ​​же успешную компиляцию, которую я получил в Eclipse в Ant, чем пытаться переработать код для динамического объединения строк.

Автор: Allan Источник Размещён: 12.11.2019 09:23

Ответы (9)


39 плюса

Решение

Кто-то пытается отправить вам сообщение :-) За то время, которое вы потратили на работу с версиями компилятора, вы могли бы загрузить данные из текстового файла - что, вероятно, и относится к ним.

Проверять, выписываться:

Автор: teabot Размещён: 29.04.2010 03:29

33 плюса

Я обнаружил, что могу использовать метод apache commons lang StringUtils.join (Object []) для решения этой проблемы.

public static final String CONSTANT = org.apache.commons.lang.StringUtils.join( new String[] {
  "This string is long", 
  "really long...", 
  "really, really LONG!!!" 
} );
Автор: mrswadge Размещён: 13.09.2013 10:31

7 плюса

Ничто из вышеперечисленного не помогло мне. Я создал один текстовый файл с именем test.txt и прочитал этот текстовый файл, используя код ниже

String content = new String(Files.readAllBytes(Paths.get("test.txt")));
Автор: Amol Suryawanshi Размещён: 06.08.2018 01:29

5 плюса

Длина строковой константы в файле класса ограничена 2 ^ 16 байтами в кодировке UTF-8, это не должно зависеть от используемого компилятора. Возможно, вы используете другой набор символов в файле ant, чем в eclipse, так что некоторым символам требуется больше байтов, чем раньше. Пожалуйста, проверьте encodingатрибут вашей javacзадачи.

Автор: Jörn Horstmann Размещён: 30.04.2010 11:57

1 плюс

Другой трюк, если я решил поместить длинную строку в исходный код, состоит в том, чтобы не допустить, чтобы компилятор обнаружил ее как константное выражение.

String dummyVar = "";
String longString = dummyVar +
    "This string is long\n" + 
    "really long...\n" + 
    "really, really LONG!!!";

Это работало некоторое время, но если вы продолжаете заходить слишком далеко, следующая проблема - переполнение стека в компиляторе. Это описывает ту же проблему и, если вы все еще решаете, как увеличить свой стек - проблема, похоже, заключается в абсолютном размере метода сейчас. Опять же, это не было проблемой в Eclipse.

Автор: df778899 Размещён: 18.03.2017 07:00

0 плюса

Ты пробовал это ? Сам никогда не пробовал, но вот соответствующий раздел:

Использование адаптера ant javac Компилятор Eclipse можно использовать внутри сценария Ant с помощью адаптера javac. Чтобы использовать компилятор Eclipse, вам просто нужно определить свойство build.compiler в вашем скрипте. Вот небольшой пример.

 <?xml version="1.0" encoding="UTF-8"?>
 <project name="compile" default="main" basedir="../.">

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

<property name="root" value="${basedir}/src"/>

<property name="destdir" value="d:/temp/bin" />

<target name="main">
    <javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
        <classpath>
          <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
        </classpath>
    </javac>        
</target>
</project>

Я действительно хотел бы сделать совместимые стандарты ваших классов. Я считаю, что официальный лимит составляет 65535, и тот факт, что Eclipse более мягок, может изменить вас в самое неудобное время, и в любом случае необходимость постоянно компилировать проект с Eclipse может действительно ограничить вас. много способов.

Автор: Yishai Размещён: 29.04.2010 03:33

0 плюса

  String theString2 = IOUtils.toString(new FileInputStream(new     
  File(rootDir + "/properties/filename.text")), "UTF-8");
Автор: Monis Majeed Размещён: 20.07.2015 05:55

0 плюса

Добавьте вашу строку в values ​​/ strings.xml, чем вызовите getResources.getString (R.string.yourstring)

Автор: xevser Размещён: 21.08.2017 11:51

-4 плюса

Вы можете попробовать это,

public static final String CONSTANT = new StringBuilder("Your really long string").toString();
Автор: Johjen K Mathew Размещён: 05.01.2018 07:54
Вопросы из категории :
32x32