Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Отъезд:

Ответ 2

Я нашел, что мог бы использовать метод 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!!!" 
} );

Ответ 3

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

Ответ 4

  String theString2 = IOUtils.toString(new FileInputStream(new     
  File(rootDir + "/properties/filename.text")), "UTF-8");

Ответ 5

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

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

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

Ответ 6

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

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

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

Ответ 7

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