Ответ 1
Кто-то пытается отправить вам сообщение:-) В то время, когда вы тратите время на использование версий компилятора, вы могли бы загрузить данные из текстового файла, что, вероятно, там, где оно принадлежит.
Отъезд:
У меня есть несколько действительно длинных строк в одном классе для инициализации информации пользователя. Когда я компилирую в Eclipse, я не получаю никаких ошибок или предупреждений, а полученный .jar отлично работает.
Недавно я решил создать файл сборки ant для использования. Всякий раз, когда я компилирую тот же класс с ant, я получаю "постоянную строку слишком длинную" ошибку компиляции. Я пробовал несколько способов установить исполняемый файл java-компилятора в ant, чтобы убедиться, что я использую ту же версию, что и в Eclipse.
Я бы предпочел выяснить, как получить тот же успешный компилятор, который я получаю в Eclipse в ant, чем пытаться переработать код для динамической конкатенации строк.
Кто-то пытается отправить вам сообщение:-) В то время, когда вы тратите время на использование версий компилятора, вы могли бы загрузить данные из текстового файла, что, вероятно, там, где оно принадлежит.
Отъезд:
Я нашел, что мог бы использовать метод 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!!!"
} );
Длина строковой константы в файле класса ограничена 2 × 16 байтами в кодировке UTF-8, это не должно зависеть от используемого компилятора. Возможно, вы используете другой набор символов в вашем файле ant, чем в eclipse, так что некоторым символам требуется больше байтов, чем раньше. Пожалуйста, проверьте атрибут encoding
вашей задачи javac
.
String theString2 = IOUtils.toString(new FileInputStream(new
File(rootDir + "/properties/filename.text")), "UTF-8");
Вы попробовали этот? Никогда не пробовал это сам, но вот соответствующий раздел:
Использование адаптера 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, действительно может начать ограничивать вас слишком много способов.
Еще один трюк, если я намерен положить длинную строку в исходный код, заключается в том, чтобы не компилировать его как постоянное выражение.
String dummyVar = "";
String longString = dummyVar +
"This string is long\n" +
"really long...\n" +
"really, really LONG!!!";
Это сработало некоторое время, но если вы продолжаете слишком далеко, следующая проблема - переполнение стека в компиляторе. В этом описывается одна и та же проблема, и если вы все еще решите, как увеличить ваш стек - проблема кажется теперь явный размер метода. Опять же, это не проблема в Eclipse.
Добавьте строку в значения /strings.xml, чем вызов getResources.getString(R.string.yourstring)