#java #maven-2
#java #maven-2
Вопрос:
У меня есть Maven 2.2.1, JDK 1.6.0_26 в Linux Ubuntu.
Я использую maven-jar-plugin версии 2.3.2
Когда я пытаюсь создать проект с помощью maven2, у меня возникает ошибка:
Встроенная ошибка: строковый индекс вне диапазона: 70
Что может быть не так? Он всегда создается, но не сегодня.
В корневом поме у меня есть конфигурация
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifestEntries>
<!--suppress MavenModelInspection -->
<Buildserver-projectname>${job.name}</Buildserver-projectname>
<Build-number>${buildserver.buildnumber}</Build-number>
<Revision-number>${svn.revision.number}</Revision-number>
<!--suppress MavenModelInspection -->
<Build-time>${buildTime}</Build-time>
<!-- Don`t change Implementation-Vendor because it use in sufd java class-->
<Implementation-Vendor>Integration Systems</Implementation-Vendor>
<!--suppress MavenModelInspection -->
<Implementation-Version>${implementation.version}</Implementation-Version>
<Implementation-Title>${project.description}</Implementation-Title>
</manifestEntries>
</archive>
</configuration>
</plugin>
Вызвано: java.lang.Исключение StringIndexOutOfBoundsException: строковый индекс вне диапазона: 70
в java.lang.String.substring(String.java:1934)
в org.codehaus.plexus.archiver.jar.Manifest$Атрибут.Строка записи (Manifest.java:388)
в org.codehaus.plexus.archiver.jar.Manifest$Атрибут.Значение записи (Manifest.java:370)
в org.codehaus.plexus.archiver.jar.Manifest$Атрибут.запись (Manifest.java: 344)
в разделе org.codehaus.plexus.archiver.jar.Manifest $.запись (Manifest.java: 588)
в org.codehaus.plexus.archiver.jar.Manifest.write(Manifest.java:1079)
в org.codehaus.plexus.archiver.jar.JarArchiver.writeManifest(JarArchiver.java:363)
в org.codehaus.plexus.archiver.jar.JarArchiver.initZipOutputStream(JarArchiver.java:298)
в org.codehaus.plexus.archiver.zip.AbstractZipArchiver.createArchiveMain(AbstractZipArchiver.java:309)
в org.codehaus.plexus.archiver.zip.AbstractZipArchiver.execute(AbstractZipArchiver.java:211)
в org.codehaus.plexus.archiver.AbstractArchiver.createArchive(AbstractArchiver.java:875)
в org.apache.maven.archiver.MavenArchiver.createArchive(MavenArchiver.java:543)
в org.apache.maven.plugin.jar.AbstractJarMojo.createArchive(AbstractJarMojo.java:216)
… еще 20
Ответ №1:
Глядя на исходный код org.codehaus.plexus.archiver.jar.Manifest, похоже, что это может быть проблема с кодированием. Сначала они выполняют string.substring(0,x), а затем string.getBytes().length > x, что выглядит очень подозрительно.
Попробуйте преобразовать ваши файлы в ascii и посмотрите, что вы получите.
Комментарии:
1. Да, кажется, что часть обработки может основываться на длине байта, а не на длине символа: jira.codehaus.org/browse /. … Вероятно, лучше сначала преобразовать манифест и посмотреть, работает ли это. Если у запрашивающего нет пользовательского манифеста, и ошибка возникает во время генерации. Это может быть проблемой.
Ответ №2:
Поскольку вы не указываете код, я могу только догадываться, что могло пойти не так. В сообщениях об ошибках говорится, что ошибка вызвана вызовом substring(int) или substring(int, int). Подобный код может вызвать эту ошибку:
String str = "I like cats.";
String favoriteObject = str.substring(7, 13);
Просматривая этот код, вы, вероятно, допустили ошибку, чрезмерно преувеличив значение endIndex в методе substring .
Если вы хотите разделить строку на основе символов, рассмотрите возможность использования String.indexOf(char)
.
Для получения дополнительной информации о строках проверьте JavaDoc.
Комментарии:
1. Это не мой код, я использую maven только для сборки jar в моем проекте.
Ответ №3:
Первое, что нужно сделать, это сравнить фактическую редакцию всего вашего проекта с вашей последней версией, которая работала. Итак, вы видите, какие файлы (MANIFEST.MF?) Изменились. Я предполагаю, что один из файлов pom был изменен или при извлечении из репозитория использовалась неправильная кодировка файла (на этот раз).
(исправлена опечатка)
Ответ №4:
Это ошибка архиватора Plexus с обработкой всех кодировок как одного байта (что неверно для UTF-8):
http://jira.codehaus.org/browse/PLXCOMP-70
Исправлено в plexus-archiver-2.1 этим патчем:
http://jira.codehaus.org/secure/attachment/37210/PLXCOMP-70.patch