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
d9af21ab
Commit
d9af21ab
authored
Mar 16, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create software components for Spring Boot jar and war artifacts
Closes gh-1666
parent
31febfa3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
199 additions
and
2 deletions
+199
-2
BundlingPluginFeatures.java
...ramework/boot/gradle/bundling/BundlingPluginFeatures.java
+68
-2
MavenPublishingIntegrationTests.java
...boot/gradle/bundling/MavenPublishingIntegrationTests.java
+73
-0
MavenPublishingIntegrationTests-bootJarCanBePublished.gradle
...enPublishingIntegrationTests-bootJarCanBePublished.gradle
+29
-0
MavenPublishingIntegrationTests-bootWarCanBePublished.gradle
...enPublishingIntegrationTests-bootWarCanBePublished.gradle
+29
-0
No files found.
spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/bundling/BundlingPluginFeatures.java
View file @
d9af21ab
...
...
@@ -16,13 +16,21 @@
package
org
.
springframework
.
boot
.
gradle
.
bundling
;
import
java.util.Collections
;
import
java.util.Set
;
import
java.util.concurrent.Callable
;
import
org.gradle.api.Project
;
import
org.gradle.api.artifacts.Configuration
;
import
org.gradle.api.artifacts.ModuleDependency
;
import
org.gradle.api.artifacts.PublishArtifact
;
import
org.gradle.api.artifacts.maven.MavenResolver
;
import
org.gradle.api.attributes.Usage
;
import
org.gradle.api.file.FileCollection
;
import
org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact
;
import
org.gradle.api.internal.attributes.Usages
;
import
org.gradle.api.internal.component.SoftwareComponentInternal
;
import
org.gradle.api.internal.component.UsageContext
;
import
org.gradle.api.plugins.JavaPlugin
;
import
org.gradle.api.plugins.JavaPluginConvention
;
import
org.gradle.api.plugins.WarPlugin
;
...
...
@@ -54,7 +62,9 @@ public class BundlingPluginFeatures implements PluginFeatures {
private
void
configureBootWarTask
(
Project
project
)
{
BootWar
bootWar
=
project
.
getTasks
().
create
(
"bootWar"
,
BootWar
.
class
);
bootWar
.
providedClasspath
(
providedRuntimeConfiguration
(
project
));
this
.
singlePublishedArtifact
.
addCandidate
(
new
ArchivePublishArtifact
(
bootWar
));
ArchivePublishArtifact
artifact
=
new
ArchivePublishArtifact
(
bootWar
);
this
.
singlePublishedArtifact
.
addCandidate
(
artifact
);
project
.
getComponents
().
add
(
new
BootSoftwareComponent
(
artifact
,
"bootWeb"
));
}
private
void
configureBootJarTask
(
Project
project
)
{
...
...
@@ -66,7 +76,9 @@ public class BundlingPluginFeatures implements PluginFeatures {
.
getByName
(
SourceSet
.
MAIN_SOURCE_SET_NAME
);
return
mainSourceSet
.
getRuntimeClasspath
();
});
this
.
singlePublishedArtifact
.
addCandidate
(
new
ArchivePublishArtifact
(
bootJar
));
ArchivePublishArtifact
artifact
=
new
ArchivePublishArtifact
(
bootJar
);
this
.
singlePublishedArtifact
.
addCandidate
(
artifact
);
project
.
getComponents
().
add
(
new
BootSoftwareComponent
(
artifact
,
"bootJava"
));
}
private
void
configureBootArchivesUpload
(
Project
project
)
{
...
...
@@ -89,4 +101,58 @@ public class BundlingPluginFeatures implements PluginFeatures {
.
getByName
(
WarPlugin
.
PROVIDED_RUNTIME_CONFIGURATION_NAME
);
}
/**
* {@link SofwareComponent} for a Spring Boot fat jar or war.
*/
private
static
final
class
BootSoftwareComponent
implements
SoftwareComponentInternal
{
private
final
PublishArtifact
artifact
;
private
final
String
name
;
private
BootSoftwareComponent
(
PublishArtifact
artifact
,
String
name
)
{
this
.
artifact
=
artifact
;
this
.
name
=
name
;
}
@Override
public
String
getName
()
{
return
this
.
name
;
}
@Override
public
Set
<
UsageContext
>
getUsages
()
{
return
Collections
.
singleton
(
new
BootUsageContext
(
this
.
artifact
));
}
private
static
final
class
BootUsageContext
implements
UsageContext
{
private
static
final
Usage
USAGE
=
Usages
.
usage
(
"master"
);
private
final
PublishArtifact
artifact
;
private
BootUsageContext
(
PublishArtifact
artifact
)
{
this
.
artifact
=
artifact
;
}
@Override
public
Usage
getUsage
()
{
return
USAGE
;
}
@Override
public
Set
<
PublishArtifact
>
getArtifacts
()
{
return
Collections
.
singleton
(
this
.
artifact
);
}
@Override
public
Set
<
ModuleDependency
>
getDependencies
()
{
return
Collections
.
emptySet
();
}
}
}
}
spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/bundling/MavenPublishingIntegrationTests.java
0 → 100644
View file @
d9af21ab
/*
* Copyright 2012-2017 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
.
gradle
.
bundling
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
org.gradle.testkit.runner.BuildResult
;
import
org.gradle.testkit.runner.TaskOutcome
;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.springframework.boot.gradle.testkit.GradleBuild
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Integration tests for publishing Boot jars and wars using Gradle's Maven Publish
* plugin.
*
* @author Andy Wilkinson
*/
public
class
MavenPublishingIntegrationTests
{
@Rule
public
final
GradleBuild
gradleBuild
=
new
GradleBuild
();
@Test
public
void
bootJarCanBePublished
()
throws
FileNotFoundException
,
IOException
{
BuildResult
result
=
this
.
gradleBuild
.
build
(
"publish"
);
assertThat
(
result
.
task
(
":publish"
).
getOutcome
()).
isEqualTo
(
TaskOutcome
.
SUCCESS
);
assertThat
(
artifactWithSuffix
(
"jar"
)).
isFile
();
assertThat
(
artifactWithSuffix
(
"pom"
)).
is
(
pomWith
().
groupId
(
"com.example"
)
.
artifactId
(
this
.
gradleBuild
.
getProjectDir
().
getName
()).
version
(
"1.0"
)
.
noPackaging
().
noDependencies
());
}
@Test
public
void
bootWarCanBePublished
()
throws
IOException
{
BuildResult
result
=
this
.
gradleBuild
.
build
(
"publish"
);
assertThat
(
result
.
task
(
":publish"
).
getOutcome
()).
isEqualTo
(
TaskOutcome
.
SUCCESS
);
assertThat
(
artifactWithSuffix
(
"war"
)).
isFile
();
assertThat
(
artifactWithSuffix
(
"pom"
)).
is
(
pomWith
().
groupId
(
"com.example"
)
.
artifactId
(
this
.
gradleBuild
.
getProjectDir
().
getName
()).
version
(
"1.0"
)
.
packaging
(
"war"
).
noDependencies
());
}
private
File
artifactWithSuffix
(
String
suffix
)
{
String
name
=
this
.
gradleBuild
.
getProjectDir
().
getName
();
return
new
File
(
new
File
(
this
.
gradleBuild
.
getProjectDir
(),
"build/repo"
),
String
.
format
(
"com/example/%s/1.0/%s-1.0.%s"
,
name
,
name
,
suffix
));
}
private
PomCondition
pomWith
()
{
return
new
PomCondition
();
}
}
spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/bundling/MavenPublishingIntegrationTests-bootJarCanBePublished.gradle
0 → 100644
View file @
d9af21ab
buildscript
{
dependencies
{
classpath
files
(
pluginClasspath
.
split
(
','
))
}
}
apply
plugin:
'java'
apply
plugin:
'org.springframework.boot'
apply
plugin:
'maven-publish'
bootJar
{
mainClass
=
'com.example.Application'
}
group
=
'com.example'
version
=
'1.0'
publishing
{
repositories
{
maven
{
url
"$buildDir/repo"
}
}
publications
{
mavenBootJava
(
MavenPublication
)
{
from
components
.
bootJava
}
}
}
spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/bundling/MavenPublishingIntegrationTests-bootWarCanBePublished.gradle
0 → 100644
View file @
d9af21ab
buildscript
{
dependencies
{
classpath
files
(
pluginClasspath
.
split
(
','
))
}
}
apply
plugin:
'war'
apply
plugin:
'org.springframework.boot'
apply
plugin:
'maven-publish'
bootWar
{
mainClass
=
'com.example.Application'
}
group
=
'com.example'
version
=
'1.0'
publishing
{
repositories
{
maven
{
url
"$buildDir/repo"
}
}
publications
{
mavenBootWeb
(
MavenPublication
)
{
from
components
.
bootWeb
}
}
}
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