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
*
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 }}']"