diff --git a/src/main/java/com/smartcodeltd/VersionMojo.java b/src/main/java/com/smartcodeltd/VersionMojo.java index 1696ab9..11e9658 100644 --- a/src/main/java/com/smartcodeltd/VersionMojo.java +++ b/src/main/java/com/smartcodeltd/VersionMojo.java @@ -1,18 +1,17 @@ package com.smartcodeltd; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.apache.maven.plugins.annotations.LifecyclePhase.PACKAGE; + +import java.io.File; +import java.io.IOException; + import com.smartcodeltd.domain.Version; import com.smartcodeltd.writer.Writer; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; -import java.io.File; -import java.io.IOException; -import java.net.URI; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.apache.maven.plugins.annotations.LifecyclePhase.PACKAGE; - /** * Retrieves project version specified in pom.xml and outputs it * either to stdout or to a file, depending on configuration. @@ -40,7 +39,7 @@ public class VersionMojo *

*/ @Parameter(defaultValue = default_output_uri, required = false, property = "outputUri") - private URI outputUri; + private String outputUri; /** *

diff --git a/src/main/java/com/smartcodeltd/writer/Writer.java b/src/main/java/com/smartcodeltd/writer/Writer.java index e2e9e2c..6c340d2 100644 --- a/src/main/java/com/smartcodeltd/writer/Writer.java +++ b/src/main/java/com/smartcodeltd/writer/Writer.java @@ -1,11 +1,14 @@ package com.smartcodeltd.writer; +import java.io.File; import java.lang.reflect.Constructor; import java.net.URI; import java.nio.charset.Charset; public abstract class Writer { - public static Writer from(URI uri, Charset charset) { + public static Writer from(String output, Charset charset) { + + URI uri = uri(output); String className = writerClassNameFrom(uri); @@ -19,6 +22,17 @@ public static Writer from(URI uri, Charset charset) { } } + private static URI uri(String output) { + File file = new File(output); + URI uri; + if (file.isAbsolute()) { + uri = file.toURI(); + } else { + uri = URI.create(output); + } + return uri; + } + protected final URI uri; protected final Charset charset; diff --git a/src/test/java/com/smartcodeltd/VersionMojoTest.java b/src/test/java/com/smartcodeltd/VersionMojoTest.java index 4ca909f..ae90057 100644 --- a/src/test/java/com/smartcodeltd/VersionMojoTest.java +++ b/src/test/java/com/smartcodeltd/VersionMojoTest.java @@ -1,5 +1,16 @@ package com.smartcodeltd; +import static com.smartcodeltd.matchers.EqualsIgnoringOSSpecificLineSeparators.equalsIgnoringOSSpecificLineSeparators; +import static com.smartcodeltd.sugar.ConfigEntry.configured; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + import com.smartcodeltd.sugar.ConfigEntry; import org.apache.maven.plugin.Mojo; import org.apache.maven.plugin.logging.Log; @@ -8,16 +19,6 @@ import org.junit.Rule; import org.junit.Test; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.net.URI; - -import static com.smartcodeltd.matchers.EqualsIgnoringOSSpecificLineSeparators.equalsIgnoringOSSpecificLineSeparators; -import static com.smartcodeltd.sugar.ConfigEntry.configured; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.*; - public class VersionMojoTest { @Rule public final TestProjectResources resource = new TestProjectResources("src/test/resources/projects", "target/projects"); @@ -92,13 +93,32 @@ public void writes_templated_version_to_file() throws Exception { )); } + @Test + public void writes_templated_version_to_file_with_outputUri_as_parameter() throws Exception { + releaseCandidateVersion = mojo.forProject("out-of-the-box"); + releaseCandidateVersion.setLog(log); + + String output = resource.baseDirectoryFor("out-of-the-box") + "/project.properties"; + given( + configured("outputUri", output), + configured("outputTemplate", + "{{ version }}" + ), + configured("encoding", "UTF-8") + ); + + releaseCandidateVersion.execute(); + + assertThat(resource.contentOf("out-of-the-box", "project.properties"), is("1.7.2-SNAPSHOT")); + } + @Test public void trims_leading_whitespace_in_templates() throws Exception { releaseCandidateVersion = mojo.forProject("out-of-the-box"); releaseCandidateVersion.setLog(log); given( - configured("outputUri", URI.create("stdout")), + configured("outputUri", "stdout"), configured("outputTemplate", " ##teamcity[setParameter name='env.PROJECT_VERSION' value='{{ version }}']\n" + " ##teamcity[message text='Project version: {{ version }}']"