我在Linux Ubuntu上有Maven 2.2.1,JDK 1.6.0_26
我使用maven-jar-plugin版本2.3.2
当我尝试使用maven2构建项目时,我有错误:
嵌入式错误:字符串索引超出范围:70
什么可能是错的? 它总是建立,但不是今天。
在root pom中我有配置
<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 at java.lang.String.substring(String.java:1934) 在org.codehaus.plexus.archiver.jar.Manifest $ Attribute.writeLine(Manifest.java:388) 在org.codehaus.plexus.archiver.jar.Manifest $ Attribute.writeValue(Manifest.java:370) 在org.codehaus.plexus.archiver.jar.Manifest $ Attribute.write(Manifest.java:344) 在org.codehaus.plexus.archiver.jar.Manifest $ Section.write(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个
答案 0 :(得分:3)
查看org.codehaus.plexus.archiver.jar.Manifest的源代码,看起来它可能是编码问题。他们首先执行string.substring(0,x)然后执行string.getBytes()。length&gt; x看起来很可疑。
尝试将您的文件转换为ascii并查看您获得的内容。
答案 1 :(得分:1)
由于您没有指定代码,我只能猜出可能出错的地方。错误消息表示错误是由invoke substring(int)或substring(int,int)引起的。像这样的代码可能会调用该错误:
String str = "I like cats.";
String favoriteObject = str.substring(7, 13);
查看此代码,您可能犯了过度夸大substring方法中的endIndex的错误。
如果您正在考虑根据字符拆分字符串,请考虑使用String.indexOf(char)
。
有关字符串的更多信息,请查看JavaDoc。
答案 2 :(得分:0)
首先要做的是将整个项目的实际版本与最新版本的版本进行比较。所以你看到哪些文件(MANIFEST.MF?)已经改变了。我假设其中一个pom文件已更改或从存储库检出使用了错误的文件编码(此时)。
(修正了错字)
答案 3 :(得分:0)
这是一个Plexus Archiver错误,将所有编码都视为单字节(UTF-8不适用):
http://jira.codehaus.org/browse/PLXCOMP-70
通过此补丁修复了plexus-archiver-2.1:
http://jira.codehaus.org/secure/attachment/37210/PLXCOMP-70.patch