Встроенная ошибка: строковый индекс вне диапазона: 70

#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