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

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

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

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

Ответы [ 9 ]

36 голосов
/ 29 апреля 2010

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

Выезд:

30 голосов
/ 13 сентября 2013

Я обнаружил, что могу использовать метод 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!!!" 
} );
5 голосов
/ 30 апреля 2010

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

4 голосов
/ 06 августа 2018

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

String content = new String(Files.readAllBytes(Paths.get("test.txt")));
1 голос
/ 18 марта 2017

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

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

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

0 голосов
/ 05 января 2018

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

public static final String CONSTANT = new StringBuilder("Your really long string").toString();
0 голосов
/ 21 августа 2017

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

0 голосов
/ 20 июля 2015
  String theString2 = IOUtils.toString(new FileInputStream(new     
  File(rootDir + "/properties/filename.text")), "UTF-8");
0 голосов
/ 29 апреля 2010

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

Использование адаптера 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 может действительно ограничить вас. много способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...