[ http://jira.codehaus.org/browse/MJAR-50?page=comments#action_70259 ] Mike Laurie commented on MJAR-50: ---------------------------------
The problem has indeed been masked because of other fixes. 3 things left to consider: * I _think_ newlines in manifest values hasn't actually been fixed in maven-archiver * maven-jar-plugin-2.0 has an explicit dependency on maven-archiver-2.0 so jar-plugin pom needs updating if archiver-2.1 is to be used. * The {{Embedded error: The attribute ... may not occur more than once in the same section}} seems to be a new problem (regression) in archiver-2.1 - I've reproduced it, and it stops me from testing the newlines issue. It's not restricted to the Specification-Title attribute. *Discussion:* The issue at hand has been masked by changes in MJAR-39. The fix in MJAR-39 ensures that the Specification-Title manifest attribute (if included) now contains project name (not project description) However, I found (like you, Dennis) that the Specification-Title was not in the jar's manifest at all. This is in turn an effect of MJAR-38 whereby the Specification-... elements are not included by default. I've just tested this in maven-archiver-2.1, which was released on 27th June, and descriptions containing newline-tab combinations no longer cause an {{invalid header}} error. However , the pom for maven-jar-plugin-2.0 has an explicit dependency on maven-archiver-2.0: {code:xml|title=maven-jar-plugin-2.0.pom}... <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-archiver</artifactId> <version>2.0</version> </dependency> ...{code} This means that by default it's still using the old archiver. When I updated my local repository's pom for maven-jar-plugin-2.0 to require version 2.1, I was able to test the new version. Can the pom be changed, or a new version of it released? I'm not sure how these things are done. I discovered that the deviation from the jar spec is actually the inclusion of linefeeds in the continuation lines which I don't think has actually been fixed. For reference, here's part of the [jar spec from Sun|http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Name-Value%20pairs%20and%20Sections], indicating why the problem happened: {noformat} newline: CR LF | LF | CR (not followed by LF) value: SPACE *otherchar newline *continuation continuation: SPACE *otherchar newline otherchar: any UTF-8 character except NUL, CR and LF {noformat} In an attribute value, a newline followed by a tab is not valid; a newline followed by a space to indicate a continuation would be valid. If there are further similar problems with jar manifests, then it may be the plexus jar class that's at fault. (org.codehaus.plexus.archiver.jar.Manifest) I don't think it should allow a manifest attrubite to contain \r or \n characters. To ensure Maven doesn't add \r or \n chars to manifest attributes, they could be stripped out in MavenArchiver: {code:title=org.apache.maven.archiver.MavenArchiver line 107} private void addManifestAttribute( Manifest manifest, String key, String value ) throws ManifestException { // Use the empty string to suppress a Manifest entry if ( value != null && !"".equals( value ) ) { /*+*/ //Don't allow newlines in manifest attribute values - plexus jar doesn't // currently strip them out, and they can result in an invalid manifest. value=value.replace('\r',' '); value=value.replace('\n',' '); /*+*/ Manifest.Attribute attr = new Manifest.Attribute( key, value ); manifest.addConfiguredAttribute( attr ); } } {code} I don't know why you get "Embedded error: The attribute "Specification-Title" may not occur more than once in the same section" I got the same error with the following configuration when I was trying to test: {code:xml|title=pom build/plugins section} <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestEntries> <Dodgy-Entry> Here's a manifest entry with a newline followed by a tab (actually several tabs) </Dodgy-Entry> </manifestEntries> </archive> </configuration> </plugin> {code} This doesn't occur with archiver-2.0; in 2.0 the dodgy entry is successfully written to the manifest with the incorrect manifest attribute format: {noformat:title=snippet from resulting manifest} Dodgy-Entry: Here's a manifest entry with a newline followed b y a tab (actually several tabs) {noformat} > "Invalid Header" in jar's Manifest (Specification-Title attribute) when tab > char in pom Description > --------------------------------------------------------------------------------------------------- > > Key: MJAR-50 > URL: http://jira.codehaus.org/browse/MJAR-50 > Project: Maven 2.x Jar Plugin > Issue Type: Bug > Affects Versions: 2.0 > Reporter: Mike Laurie > Priority: Trivial > > I typed a <description> element into my pom; the description spanned 2 lines, > and my text editor put a tab char at the beginning of the 2nd line. > The project built correctly, but another project depended on the resulting > jar. > The compilation of the depending project failed with "invalid header" on the > jar I'd just compiled. > When I looked at the jar's manifest, I saw the Specification-Title attribute > had the tab character still in it from the <description> element. > Replacing the tab with spaces in the pom solved the problem. > However, this was valid xml that caused a compilation problem, so I think > it's a minor bug with the jar production code. > Note that the full description is trimmed before going into the manifest, so > any > Easy to work around, but it would be nice if whitespace in the <description> > element were consolidated into spaces before copying to the manifest. > Doesn't need any fancy layout stuff - just any multiple instances of tabs, > spaces, lf or cr should be replaced by a single space. > Try (I haven't tried to compile this!): > {code} > public String consolidateWhitespace(String input){ > StringTokenizer st = new StringTokenizer(input); > StringBuffer rv = new StringBuffer(); > while (st.hasMoreTokens()){ > rv.append(st.nextToken() + (st.hasMoreTokens()?" ":"")); > } > return rv.toString(); > } > {code} -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira