Commit d07f6894 authored by Henri Kerola's avatar Henri Kerola Committed by Stephane Nicoll

"spring war" should copy resources to WEB-INF/classes

Closes gh-6351
parent 07690bab
...@@ -16,24 +16,23 @@ ...@@ -16,24 +16,23 @@
package org.springframework.boot.cli; package org.springframework.boot.cli;
import java.io.File;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.cli.command.archive.WarCommand; import org.springframework.boot.cli.command.archive.WarCommand;
import org.springframework.boot.cli.infrastructure.CommandLineInvoker; import org.springframework.boot.cli.infrastructure.CommandLineInvoker;
import org.springframework.boot.cli.infrastructure.CommandLineInvoker.Invocation; import org.springframework.boot.cli.infrastructure.CommandLineInvoker.Invocation;
import org.springframework.boot.loader.tools.JavaExecutable; import org.springframework.boot.loader.tools.JavaExecutable;
import org.springframework.util.SocketUtils; import org.springframework.util.SocketUtils;
import static org.hamcrest.Matchers.containsString; import java.io.File;
import static org.junit.Assert.assertThat; import java.util.zip.ZipFile;
import static org.junit.Assert.assertTrue;
import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Integration test for {@link WarCommand}. * Integration test for {@link WarCommand}.
* *
* @author Andrey Stolyarov * @author Andrey Stolyarov
* @author Henri Kerola
*/ */
public class WarCommandIT { public class WarCommandIT {
...@@ -47,19 +46,38 @@ public class WarCommandIT { ...@@ -47,19 +46,38 @@ public class WarCommandIT {
Invocation invocation = this.cli.invoke("war", war.getAbsolutePath(), Invocation invocation = this.cli.invoke("war", war.getAbsolutePath(),
"war.groovy"); "war.groovy");
invocation.await(); invocation.await();
assertTrue(war.exists()); assertThat(war.exists()).isTrue();
Process process = new JavaExecutable() Process process = new JavaExecutable()
.processBuilder("-jar", war.getAbsolutePath(), "--server.port=" + port) .processBuilder("-jar", war.getAbsolutePath(), "--server.port=" + port)
.start(); .start();
invocation = new Invocation(process); invocation = new Invocation(process);
invocation.await(); invocation.await();
assertThat(invocation.getOutput(), containsString("onStart error")); assertThat(invocation.getOutput()).contains("onStart error");
assertThat(invocation.getOutput(), containsString("Tomcat started")); assertThat(invocation.getOutput()).contains("Tomcat started");
assertThat(invocation.getOutput(), assertThat(invocation.getOutput())
containsString("/WEB-INF/lib-provided/tomcat-embed-core")); .contains("/WEB-INF/lib-provided/tomcat-embed-core");
assertThat(invocation.getOutput(), assertThat(invocation.getOutput())
containsString("/WEB-INF/lib-provided/tomcat-embed-core")); .contains("/WEB-INF/lib-provided/tomcat-embed-core");
process.destroy(); process.destroy();
} }
@Test
public void resourcesAreCopiedToWebInfClasses() throws Exception {
File war = new File("target/test-app.war");
Invocation invocation = this.cli.invoke("war", war.getAbsolutePath(),
"war.groovy");
invocation.await();
assertThat(war.exists()).isTrue();
ZipFile warFile = new ZipFile(war.getAbsolutePath());
try {
assertThat(warFile.getEntry("application.properties")).isNull();
assertThat(warFile.getEntry("WEB-INF/classes/application.properties")).isNotNull();
}
finally {
warFile.close();
}
}
} }
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.springframework.boot.cli.command.archive; package org.springframework.boot.cli.command.archive;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -73,6 +72,7 @@ import org.springframework.util.Assert; ...@@ -73,6 +72,7 @@ import org.springframework.util.Assert;
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Phillip Webb * @author Phillip Webb
* @author Andrey Stolyarov * @author Andrey Stolyarov
* @author Henri Kerola
*/ */
abstract class ArchiveCommand extends OptionParsingCommand { abstract class ArchiveCommand extends OptionParsingCommand {
...@@ -93,7 +93,7 @@ abstract class ArchiveCommand extends OptionParsingCommand { ...@@ -93,7 +93,7 @@ abstract class ArchiveCommand extends OptionParsingCommand {
private final String type; private final String type;
private final Layout layout; protected final Layout layout;
private OptionSpec<String> includeOption; private OptionSpec<String> includeOption;
...@@ -278,13 +278,15 @@ abstract class ArchiveCommand extends OptionParsingCommand { ...@@ -278,13 +278,15 @@ abstract class ArchiveCommand extends OptionParsingCommand {
libraries.add(new Library(entry.getFile(), LibraryScope.COMPILE)); libraries.add(new Library(entry.getFile(), LibraryScope.COMPILE));
} }
else { else {
writer.writeEntry(entry.getName(), writeClasspathEntry(writer, entry);
new FileInputStream(entry.getFile()));
} }
} }
return libraries; return libraries;
} }
protected abstract void writeClasspathEntry(JarWriter writer,
MatchedResource entry) throws IOException;
protected abstract LibraryScope getLibraryScope(File file); protected abstract LibraryScope getLibraryScope(File file);
} }
......
...@@ -17,8 +17,11 @@ ...@@ -17,8 +17,11 @@
package org.springframework.boot.cli.command.archive; package org.springframework.boot.cli.command.archive;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.springframework.boot.cli.command.Command; import org.springframework.boot.cli.command.Command;
import org.springframework.boot.loader.tools.JarWriter;
import org.springframework.boot.loader.tools.Layouts; import org.springframework.boot.loader.tools.Layouts;
import org.springframework.boot.loader.tools.LibraryScope; import org.springframework.boot.loader.tools.LibraryScope;
...@@ -27,6 +30,7 @@ import org.springframework.boot.loader.tools.LibraryScope; ...@@ -27,6 +30,7 @@ import org.springframework.boot.loader.tools.LibraryScope;
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Phillip Webb * @author Phillip Webb
* @author Henri Kerola
*/ */
public class JarCommand extends ArchiveCommand { public class JarCommand extends ArchiveCommand {
...@@ -46,6 +50,13 @@ public class JarCommand extends ArchiveCommand { ...@@ -46,6 +50,13 @@ public class JarCommand extends ArchiveCommand {
return LibraryScope.COMPILE; return LibraryScope.COMPILE;
} }
@Override
protected void writeClasspathEntry(JarWriter writer,
ResourceMatcher.MatchedResource entry) throws IOException {
writer.writeEntry(entry.getName(),
new FileInputStream(entry.getFile()));
}
} }
} }
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package org.springframework.boot.cli.command.archive; package org.springframework.boot.cli.command.archive;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import org.springframework.boot.cli.command.Command; import org.springframework.boot.cli.command.Command;
...@@ -29,6 +30,7 @@ import org.springframework.boot.loader.tools.LibraryScope; ...@@ -29,6 +30,7 @@ import org.springframework.boot.loader.tools.LibraryScope;
* *
* @author Andrey Stolyarov * @author Andrey Stolyarov
* @author Phillip Webb * @author Phillip Webb
* @author Henri Kerola
* @since 1.3.0 * @since 1.3.0
*/ */
public class WarCommand extends ArchiveCommand { public class WarCommand extends ArchiveCommand {
...@@ -61,6 +63,12 @@ public class WarCommand extends ArchiveCommand { ...@@ -61,6 +63,12 @@ public class WarCommand extends ArchiveCommand {
super.addCliClasses(writer); super.addCliClasses(writer);
} }
@Override
protected void writeClasspathEntry(JarWriter writer,
ResourceMatcher.MatchedResource entry) throws IOException {
writer.writeEntry(this.layout.getClassesLocation() + entry.getName(),
new FileInputStream(entry.getFile()));
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment