maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thorsten Schöning (JIRA) <j...@apache.org>
Subject [jira] [Comment Edited] (MJAVADOC-469) javadoc-plugin does not double backslashes in argument file
Date Mon, 04 Jun 2018 06:44:00 GMT

    [ https://issues.apache.org/jira/browse/MJAVADOC-469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16155839#comment-16155839
] 

Thorsten Schöning edited comment on MJAVADOC-469 at 6/4/18 6:43 AM:
--------------------------------------------------------------------

Here's a possible workaround for others having the same problem. It's basically doubling the
available backslashes on it's own before forwarding the path as a command line arg. This needs
to be done before the path is used by the Maven plugin and written to the argument file, afterwards
it's too late. After Javadoc parsed the paths one can't reconstruct the path anymore because
the single backslashes just disappear if they have no special meaning in front of character.
While "\t" becomes a tab, "\U" just becomes "U" for Javadoc.

{CODE}
<plugins>
	<!-- https://issues.apache.org/jira/browse/MJAVADOC-469 -->
	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>build-helper-maven-plugin</artifactId>
		<executions>
			<execution>
				<id>create-javadoc-compat-out-dir</id>
				<phase>pre-site</phase>
				<goals>
					<goal>regex-property</goal>
				</goals>
				<configuration>
					<name>javadoc-compat-out-dir</name>
					<value>${project.build.directory}</value>
					<regex>\\</regex>
					<replacement>\\\\</replacement>
					<failIfNoMatch>false</failIfNoMatch>
				</configuration>
			</execution>
		</executions>
	 </plugin>
	<plugin>
		<artifactId>maven-javadoc-plugin</artifactId>
		<executions>
			<execution>
				<id>extract-resource-info</id>
				<phase>pre-site</phase>
				<goals>
					<goal>javadoc</goal>
				</goals>
				<configuration>
					<docletArtifacts>
						<docletArtifact>
							<groupId>${project.groupId}</groupId>
							<artifactId>axis2-transport-testkit</artifactId>
							<version>${project.version}</version>
						</docletArtifact>
					</docletArtifacts>
					<doclet>org.apache.axis2.transport.testkit.doclet.ResourceInfoDoclet</doclet>
					<useStandardDocletOptions>false</useStandardDocletOptions>
					<show>private</show>
					<additionalparam>-out "${javadoc-compat-out-dir}/resource-info.dat"</additionalparam>
				</configuration>
			</execution>
		[...]
	</plugin>
	[...]
</plugins>
{CODE}


was (Author: tschoening):
Here's a possible workaround for others having the same problem. It's basically doubling the
available backslashes on it's own before forwarding the path as a command line arg. This needs
to be done before the path is used by the Maven plugin and written to the argument file, afterwards
it's too late. After Javadoc parsed the paths one can't reconstruct the path anymore because
the single backslashes just disappear if they have no special meaning in front of character.
While "\t" becomes a tab, "\U" just becomes "U" for Javadoc.

{CODE}
<plugins>
	<!-- https://issues.apache.org/jira/browse/MJAVADOC-469 -->
	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>build-helper-maven-plugin</artifactId>
		<executions>
			<execution>
				<id>create-javadoc-compat-out-dir</id>
				<phase>pre-site</phase>
				<goals>
					<goal>regex-property</goal>
				</goals>
				<configuration>
					<name>javadoc-compat-out-dir</name>
					<value>${project.build.directory}</value>
					<regex>\\</regex>
					<replacement>\\\\</replacement>
					<failIfNoMatch>true</failIfNoMatch>
				</configuration>
			</execution>
		</executions>
	 </plugin>
	<plugin>
		<artifactId>maven-javadoc-plugin</artifactId>
		<executions>
			<execution>
				<id>extract-resource-info</id>
				<phase>pre-site</phase>
				<goals>
					<goal>javadoc</goal>
				</goals>
				<configuration>
					<docletArtifacts>
						<docletArtifact>
							<groupId>${project.groupId}</groupId>
							<artifactId>axis2-transport-testkit</artifactId>
							<version>${project.version}</version>
						</docletArtifact>
					</docletArtifacts>
					<doclet>org.apache.axis2.transport.testkit.doclet.ResourceInfoDoclet</doclet>
					<useStandardDocletOptions>false</useStandardDocletOptions>
					<show>private</show>
					<additionalparam>-out "${javadoc-compat-out-dir}/resource-info.dat"</additionalparam>
				</configuration>
			</execution>
		[...]
	</plugin>
	[...]
</plugins>
{CODE}

> javadoc-plugin does not double backslashes in argument file
> -----------------------------------------------------------
>
>                 Key: MJAVADOC-469
>                 URL: https://issues.apache.org/jira/browse/MJAVADOC-469
>             Project: Maven Javadoc Plugin
>          Issue Type: Bug
>          Components: javadoc
>    Affects Versions: 2.10.4
>            Reporter: Ilya Basin
>            Priority: Major
>
> On Windows `generate-rest-docs` goal of `maven-jira-plugin` calls `maven-javadoc-plugin`
with:
>     {code}additionalparam: -output "C:\path\to\target\classes\resourcedoc.xml"{code}
> If this argument was passed to `javadoc.exe` directly, I'm pretty sure this would work.
However, the javadoc plugin generates an argument file[1] named "options" and executes:
>     {code}javadoc.exe ... @options{code}
> The file contains all arguments with unescaped backslashes, although javadoc command
documentation[2] suggests:
> {quote}If a filename contains embedded spaces, put the whole filename in double quotes,
and double each backslash ("My Files\\Stuff.java"){quote}
> javadoc plugin version "2.4" is hardcoded in jira plugin, but I see no related changes
in "2.10.4" in AbstractJavadocMojo.addCommandLineOptions() .
>   [1]: https://maven.apache.org/plugins/maven-javadoc-plugin/
>   [2]: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#argumentfiles



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message