Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
6eaa8d7c
Commit
6eaa8d7c
authored
Dec 08, 2016
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.5.x'
parents
6a1f3d2d
53287ead
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
179 additions
and
71 deletions
+179
-71
JarLauncher.java
...ain/java/org/springframework/boot/loader/JarLauncher.java
+2
-9
AbstractExecutableArchiveLauncherTests.java
...k/boot/loader/AbstractExecutableArchiveLauncherTests.java
+99
-0
JarLauncherTests.java
...ava/org/springframework/boot/loader/JarLauncherTests.java
+64
-0
WarLauncherTests.java
...ava/org/springframework/boot/loader/WarLauncherTests.java
+14
-62
No files found.
spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/JarLauncher.java
View file @
6eaa8d7c
...
@@ -16,14 +16,12 @@
...
@@ -16,14 +16,12 @@
package
org
.
springframework
.
boot
.
loader
;
package
org
.
springframework
.
boot
.
loader
;
import
java.util.List
;
import
org.springframework.boot.loader.archive.Archive
;
import
org.springframework.boot.loader.archive.Archive
;
/**
/**
* {@link Launcher} for JAR based archives. This launcher assumes that dependency jars are
* {@link Launcher} for JAR based archives. This launcher assumes that dependency jars are
* included inside a {@code /BOOT-INF/lib}
and that application classes are included
* included inside a {@code /BOOT-INF/lib}
directory and that application classes are
* inside a {@code /BOOT-INF/classes} directory.
* in
cluded in
side a {@code /BOOT-INF/classes} directory.
*
*
* @author Phillip Webb
* @author Phillip Webb
* @author Andy Wilkinson
* @author Andy Wilkinson
...
@@ -49,11 +47,6 @@ public class JarLauncher extends ExecutableArchiveLauncher {
...
@@ -49,11 +47,6 @@ public class JarLauncher extends ExecutableArchiveLauncher {
return
entry
.
getName
().
startsWith
(
BOOT_INF_LIB
);
return
entry
.
getName
().
startsWith
(
BOOT_INF_LIB
);
}
}
@Override
protected
void
postProcessClassPathArchives
(
List
<
Archive
>
archives
)
throws
Exception
{
archives
.
add
(
0
,
getArchive
());
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
JarLauncher
().
launch
(
args
);
new
JarLauncher
().
launch
(
args
);
}
}
...
...
spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/AbstractExecutableArchiveLauncherTests.java
0 → 100644
View file @
6eaa8d7c
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
loader
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.util.Enumeration
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarFile
;
import
java.util.jar.JarOutputStream
;
import
java.util.zip.CRC32
;
import
java.util.zip.ZipEntry
;
import
org.junit.Rule
;
import
org.junit.rules.TemporaryFolder
;
import
org.springframework.boot.loader.archive.Archive
;
import
org.springframework.util.FileCopyUtils
;
/**
* Base class for testing {@link ExecutableArchiveLauncher} implementations.
*
* @author Andy Wilkinson
*/
public
class
AbstractExecutableArchiveLauncherTests
{
@Rule
public
TemporaryFolder
temp
=
new
TemporaryFolder
();
protected
File
createJarArchive
(
String
name
,
String
entryPrefix
)
throws
IOException
{
File
archive
=
this
.
temp
.
newFile
(
name
);
JarOutputStream
jarOutputStream
=
new
JarOutputStream
(
new
FileOutputStream
(
archive
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
entryPrefix
+
"/"
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
entryPrefix
+
"/classes/"
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
entryPrefix
+
"/lib/"
));
JarEntry
webInfLibFoo
=
new
JarEntry
(
entryPrefix
+
"/lib/foo.jar"
);
webInfLibFoo
.
setMethod
(
ZipEntry
.
STORED
);
ByteArrayOutputStream
fooJarStream
=
new
ByteArrayOutputStream
();
new
JarOutputStream
(
fooJarStream
).
close
();
webInfLibFoo
.
setSize
(
fooJarStream
.
size
());
CRC32
crc32
=
new
CRC32
();
crc32
.
update
(
fooJarStream
.
toByteArray
());
webInfLibFoo
.
setCrc
(
crc32
.
getValue
());
jarOutputStream
.
putNextEntry
(
webInfLibFoo
);
jarOutputStream
.
write
(
fooJarStream
.
toByteArray
());
jarOutputStream
.
close
();
return
archive
;
}
protected
File
explode
(
File
archive
)
throws
IOException
{
File
exploded
=
this
.
temp
.
newFolder
(
"exploded"
);
JarFile
jarFile
=
new
JarFile
(
archive
);
Enumeration
<
JarEntry
>
entries
=
jarFile
.
entries
();
while
(
entries
.
hasMoreElements
())
{
JarEntry
entry
=
entries
.
nextElement
();
File
entryFile
=
new
File
(
exploded
,
entry
.
getName
());
if
(
entry
.
isDirectory
())
{
entryFile
.
mkdirs
();
}
else
{
FileCopyUtils
.
copy
(
jarFile
.
getInputStream
(
entry
),
new
FileOutputStream
(
entryFile
));
}
}
jarFile
.
close
();
return
exploded
;
}
protected
Set
<
URL
>
getUrls
(
List
<
Archive
>
archives
)
throws
MalformedURLException
{
Set
<
URL
>
urls
=
new
HashSet
<
URL
>(
archives
.
size
());
for
(
Archive
archive
:
archives
)
{
urls
.
add
(
archive
.
getUrl
());
}
return
urls
;
}
}
spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/JarLauncherTests.java
0 → 100644
View file @
6eaa8d7c
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
loader
;
import
java.io.File
;
import
java.net.URL
;
import
java.util.List
;
import
org.junit.Test
;
import
org.springframework.boot.loader.archive.Archive
;
import
org.springframework.boot.loader.archive.ExplodedArchive
;
import
org.springframework.boot.loader.archive.JarFileArchive
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link JarLauncher}.
*
* @author Andy Wilkinson
*/
public
class
JarLauncherTests
extends
AbstractExecutableArchiveLauncherTests
{
@Test
public
void
explodedJarHasOnlyBootInfClassesAndContentsOfBootInfLibOnClasspath
()
throws
Exception
{
File
explodedRoot
=
explode
(
createJarArchive
(
"archive.jar"
,
"BOOT-INF"
));
JarLauncher
launcher
=
new
JarLauncher
(
new
ExplodedArchive
(
explodedRoot
,
true
));
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
getUrls
(
archives
)).
containsOnly
(
new
File
(
explodedRoot
,
"BOOT-INF/classes"
).
toURI
().
toURL
(),
new
URL
(
"jar:"
+
new
File
(
explodedRoot
,
"BOOT-INF/lib/foo.jar"
).
toURI
().
toURL
()
+
"!/"
));
}
@Test
public
void
archivedJarHasOnlyBootInfClassesAndContentsOfBootInfLibOnClasspath
()
throws
Exception
{
File
jarRoot
=
createJarArchive
(
"archive.jar"
,
"BOOT-INF"
);
JarLauncher
launcher
=
new
JarLauncher
(
new
JarFileArchive
(
jarRoot
));
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
getUrls
(
archives
)).
containsOnly
(
new
URL
(
"jar:"
+
jarRoot
.
toURI
().
toURL
()
+
"!/BOOT-INF/classes!/"
),
new
URL
(
"jar:"
+
jarRoot
.
toURI
().
toURL
()
+
"!/BOOT-INF/lib/foo.jar!/"
));
}
}
spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/WarLauncherTests.java
View file @
6eaa8d7c
...
@@ -16,96 +16,48 @@
...
@@ -16,96 +16,48 @@
package
org
.
springframework
.
boot
.
loader
;
package
org
.
springframework
.
boot
.
loader
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.net.URL
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarOutputStream
;
import
java.util.zip.CRC32
;
import
java.util.zip.ZipEntry
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.springframework.boot.loader.archive.Archive
;
import
org.springframework.boot.loader.archive.Archive
;
import
org.springframework.boot.loader.archive.ExplodedArchive
;
import
org.springframework.boot.loader.archive.ExplodedArchive
;
import
org.springframework.boot.loader.archive.JarFileArchive
;
import
org.springframework.boot.loader.archive.JarFileArchive
;
import
org.springframework.util.FileSystemUtils
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
/**
* Tests for {@link WarLauncher}
* Tests for {@link WarLauncher}
.
*
*
* @author Andy Wilkinson
* @author Andy Wilkinson
*/
*/
public
class
WarLauncherTests
{
public
class
WarLauncherTests
extends
AbstractExecutableArchiveLauncherTests
{
@Test
@Test
public
void
explodedWarHasOnlyWebInfClassesAndContentsOfWebInfLibOnClasspath
()
public
void
explodedWarHasOnlyWebInfClassesAndContentsOfWebInfLibOnClasspath
()
throws
Exception
{
throws
Exception
{
File
warRoot
=
new
File
(
"target/exploded-war"
);
File
explodedRoot
=
explode
(
createJarArchive
(
"archive.war"
,
"WEB-INF"
));
FileSystemUtils
.
deleteRecursively
(
warRoot
);
WarLauncher
launcher
=
new
WarLauncher
(
new
ExplodedArchive
(
explodedRoot
,
true
));
warRoot
.
mkdirs
();
File
webInfClasses
=
new
File
(
warRoot
,
"WEB-INF/classes"
);
webInfClasses
.
mkdirs
();
File
webInfLib
=
new
File
(
warRoot
,
"WEB-INF/lib"
);
webInfLib
.
mkdirs
();
File
webInfLibFoo
=
new
File
(
webInfLib
,
"foo.jar"
);
new
JarOutputStream
(
new
FileOutputStream
(
webInfLibFoo
)).
close
();
WarLauncher
launcher
=
new
WarLauncher
(
new
ExplodedArchive
(
warRoot
,
true
));
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
getUrls
(
archives
)).
containsOnly
(
webInfClasses
.
toURI
().
toURL
(),
assertThat
(
getUrls
(
archives
)).
containsOnly
(
new
URL
(
"jar:"
+
webInfLibFoo
.
toURI
().
toURL
()
+
"!/"
));
new
File
(
explodedRoot
,
"WEB-INF/classes"
).
toURI
().
toURL
(),
new
URL
(
"jar:"
+
new
File
(
explodedRoot
,
"WEB-INF/lib/foo.jar"
).
toURI
().
toURL
()
+
"!/"
));
}
}
@Test
@Test
public
void
archivedWarHasOnlyWebInfClassesAndContentsO
f
WebInfLibOnClasspath
()
public
void
archivedWarHasOnlyWebInfClassesAndContentsOWebInfLibOnClasspath
()
throws
Exception
{
throws
Exception
{
File
warRoot
=
createWarArchive
(
);
File
jarRoot
=
createJarArchive
(
"archive.war"
,
"WEB-INF"
);
WarLauncher
launcher
=
new
WarLauncher
(
new
JarFileArchive
(
w
arRoot
));
WarLauncher
launcher
=
new
WarLauncher
(
new
JarFileArchive
(
j
arRoot
));
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
List
<
Archive
>
archives
=
launcher
.
getClassPathArchives
();
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
archives
).
hasSize
(
2
);
assertThat
(
getUrls
(
archives
)).
containsOnly
(
assertThat
(
getUrls
(
archives
)).
containsOnly
(
new
URL
(
"jar:"
+
warRoot
.
toURI
().
toURL
()
+
"!/WEB-INF/classes!/"
),
new
URL
(
"jar:"
+
jarRoot
.
toURI
().
toURL
()
+
"!/WEB-INF/classes!/"
),
new
URL
(
"jar:"
+
warRoot
.
toURI
().
toURL
()
+
"!/WEB-INF/lib/foo.jar!/"
));
new
URL
(
"jar:"
+
jarRoot
.
toURI
().
toURL
()
+
"!/WEB-INF/lib/foo.jar!/"
));
}
private
Set
<
URL
>
getUrls
(
List
<
Archive
>
archives
)
throws
MalformedURLException
{
Set
<
URL
>
urls
=
new
HashSet
<
URL
>(
archives
.
size
());
for
(
Archive
archive
:
archives
)
{
urls
.
add
(
archive
.
getUrl
());
}
return
urls
;
}
}
private
File
createWarArchive
()
throws
IOException
,
FileNotFoundException
{
File
warRoot
=
new
File
(
"target/archive.war"
);
warRoot
.
delete
();
JarOutputStream
jarOutputStream
=
new
JarOutputStream
(
new
FileOutputStream
(
warRoot
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
"WEB-INF/"
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
"WEB-INF/classes/"
));
jarOutputStream
.
putNextEntry
(
new
JarEntry
(
"WEB-INF/lib/"
));
JarEntry
webInfLibFoo
=
new
JarEntry
(
"WEB-INF/lib/foo.jar"
);
webInfLibFoo
.
setMethod
(
ZipEntry
.
STORED
);
ByteArrayOutputStream
fooJarStream
=
new
ByteArrayOutputStream
();
new
JarOutputStream
(
fooJarStream
).
close
();
webInfLibFoo
.
setSize
(
fooJarStream
.
size
());
CRC32
crc32
=
new
CRC32
();
crc32
.
update
(
fooJarStream
.
toByteArray
());
webInfLibFoo
.
setCrc
(
crc32
.
getValue
());
jarOutputStream
.
putNextEntry
(
webInfLibFoo
);
jarOutputStream
.
write
(
fooJarStream
.
toByteArray
());
jarOutputStream
.
close
();
return
warRoot
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment