Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
2875f4e
Add a kotlin library build init plugin type.
adammurdoch Aug 10, 2018
88c7f63
Flesh out the build init plugin test coverage a little.
adammurdoch Aug 10, 2018
6d25fb4
Add a kotlin application build init plugin type.
adammurdoch Aug 10, 2018
2f618e5
Update release notes and user guide to mention new build init types.
adammurdoch Aug 10, 2018
e2936b8
Move responsibility for generation of the settings script out of each…
adammurdoch Aug 10, 2018
ef4131c
Improve the error messages reported by the build init plugin for unkn…
adammurdoch Aug 11, 2018
50f7ab5
Change build init plugin to generate empty resource directories for J…
adammurdoch Aug 11, 2018
231a070
Remove incubating notice from the build init plugin chapter.
adammurdoch Aug 11, 2018
ed96268
Add a `--project-name` command line option to the `init` task to allo…
adammurdoch Aug 11, 2018
83e2ace
Some tweaks to javadocs and command line option description in the bu…
adammurdoch Aug 11, 2018
d6c8929
Add a `--package` command line option to the `init` task to allow the…
adammurdoch Aug 12, 2018
503d435
Change the `init` task to prompt the user for any build init settings…
adammurdoch Aug 12, 2018
d5fc8b2
Change the user prompt infrastructure to give the user some feedback …
adammurdoch Aug 16, 2018
0f7b9de
Fix merge issue.
adammurdoch Aug 17, 2018
4e77286
Change test class so that it doesn't run each test case using both da…
adammurdoch Aug 17, 2018
8148d3c
Tweak the prompts used by the `init` task.
adammurdoch Aug 17, 2018
c45d93a
Remove unused class.
adammurdoch Aug 17, 2018
ced3c95
Move the 'interactive' flag that is passed from the client to daemon …
adammurdoch Aug 17, 2018
8ef0cdd
Remove usages of `StartParameter.interactive` and deprecate the gette…
adammurdoch Aug 17, 2018
624e2e3
Update release notes to mention new features and deprecation.
adammurdoch Aug 17, 2018
fba12bd
Accept breaking change on `InitBuild` task type.
adammurdoch Aug 18, 2018
c317b11
Do not include a dependency on both kotlin stdlib and kotlin jdk 8 st…
adammurdoch Aug 18, 2018
ce854f7
Tweak prompts and messages for the `init` task.
adammurdoch Aug 18, 2018
ed68485
Some work-arounds to improve the behaviour of the interactive prompts…
adammurdoch Aug 18, 2018
0659c20
Fix running kotlin init tests on Java 7.
adammurdoch Aug 19, 2018
cdff5d9
Fix debug output scraping when a prompt is present.
adammurdoch Aug 19, 2018
8343feb
Change the `init` task to improve the interactive experience when con…
adammurdoch Aug 19, 2018
feca5a1
Do not use an isolated user home dir for build init tests, to avoid d…
adammurdoch Aug 20, 2018
d6979e8
Change the `init` task to default to Kotlin DSL when generating Kotli…
adammurdoch Aug 20, 2018
a6f24e6
Allow the user to be prompted with a yes/no question that has a defau…
adammurdoch Aug 20, 2018
9907165
Improve the `init` task when in interactive mode when a Maven build i…
adammurdoch Aug 20, 2018
b3f888d
Mark test as leaking files.
adammurdoch Aug 20, 2018
2e42305
Refactor the build init infrastructure to distinguish between initial…
adammurdoch Aug 20, 2018
221cf3c
Change the `init` task to generate a simple `.gitignore` file in the …
adammurdoch Aug 20, 2018
2ad5195
Change `init` task so that it uses a default source package name that…
adammurdoch Aug 20, 2018
a30084c
Minor tweak to layout of prompt used to ask user to select an option …
adammurdoch Aug 20, 2018
4e5d574
Change the `init` task to reuse the build script generator infrastruc…
adammurdoch Aug 20, 2018
94cb026
Move some classes around in "build-init" to break package cycle.
adammurdoch Aug 20, 2018
23e7cbc
Change the `init` task to reuse the build script generation infrastru…
adammurdoch Aug 20, 2018
185afb8
Reuse the build script generation infrastructure to generate more of …
adammurdoch Aug 20, 2018
e49a318
Reuse the build script generation infrastructure to generate more of …
adammurdoch Aug 20, 2018
f9f4431
Reuse the build script generation infrastructure to generate more of …
adammurdoch Aug 21, 2018
068cee5
Reuse the build script generation infrastructure to generate more of …
adammurdoch Aug 21, 2018
ba9674a
Reuse the build script generation infrastructure to generate more of …
adammurdoch Aug 21, 2018
ed7080b
Reuse the build script generation infrastructure to generate the depe…
adammurdoch Aug 22, 2018
ac842a0
Fine tune the formatting of the scripts generated by the `init` plugi…
adammurdoch Aug 22, 2018
ece6fc0
The `init` task now uses the build script generation infrastructure t…
adammurdoch Aug 22, 2018
34091a8
Fine tune the `.gitignore` file that the `init` task generates.
adammurdoch Aug 22, 2018
548474b
Update release notes and user guide for changes to the build init plu…
adammurdoch Aug 22, 2018
e657837
Fix integration test on Windows.
adammurdoch Aug 23, 2018
1fa60a0
Fix `@since` Javadoc tags.
adammurdoch Aug 23, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Change the init task to reuse the build script generator infrastruc…
…ture to generate the Gradle settings file for a Maven build, rather than creating a string with ad hoc formatting.
  • Loading branch information
adammurdoch committed Aug 23, 2018
commit 4e5d5745d7ac40b5c2e3c6e6b2de7d50d8ce815b
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@

public class PomProjectInitDescriptor implements BuildConverter {
private final MavenSettingsProvider settingsProvider;
private final BuildScriptBuilderFactory scriptBuilderFactory;
private final PathToFileResolver fileResolver;

public PomProjectInitDescriptor(PathToFileResolver fileResolver, MavenSettingsProvider mavenSettingsProvider) {
public PomProjectInitDescriptor(PathToFileResolver fileResolver, MavenSettingsProvider mavenSettingsProvider, BuildScriptBuilderFactory scriptBuilderFactory) {
this.fileResolver = fileResolver;
this.settingsProvider = mavenSettingsProvider;
this.scriptBuilderFactory = scriptBuilderFactory;
}

@Override
Expand All @@ -56,7 +58,7 @@ public void generate(InitSettings initSettings) {
try {
Settings settings = settingsProvider.buildSettings();
Set<MavenProject> mavenProjects = new MavenProjectsCreator().create(settings, pom);
new Maven2Gradle(mavenProjects, fileResolver.resolve(".")).convert();
new Maven2Gradle(mavenProjects, fileResolver.resolve("."), scriptBuilderFactory).convert();
} catch (Exception exception) {
throw new MavenConversionException(String.format("Could not convert Maven POM %s to a Gradle build.", pom), exception);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public ProjectLayoutSetupRegistry createProjectLayoutSetupRegistry() {
List<BuildContentGenerator> jvmProjectGenerators = ImmutableList.of(settingsDescriptor, gitIgnoreGenerator, resourcesGenerator);
List<BuildContentGenerator> commonGenerators = ImmutableList.of(settingsDescriptor, gitIgnoreGenerator);
BuildInitializer basicType = of(new BasicProjectGenerator(scriptBuilderFactory), commonGenerators);
PomProjectInitDescriptor mavenBuildConverter = new PomProjectInitDescriptor(fileResolver, mavenSettingsProvider);
PomProjectInitDescriptor mavenBuildConverter = new PomProjectInitDescriptor(fileResolver, mavenSettingsProvider, scriptBuilderFactory);
ProjectLayoutSetupRegistry registry = new ProjectLayoutSetupRegistry(basicType, mavenBuildConverter);
registry.add(of(new JavaLibraryProjectInitDescriptor(scriptBuilderFactory, templateOperationBuilder, fileResolver, libraryVersionProvider, documentationRegistry), jvmProjectGenerators));
registry.add(of(new JavaApplicationProjectInitDescriptor(scriptBuilderFactory, templateOperationBuilder, fileResolver, libraryVersionProvider, documentationRegistry), jvmProjectGenerators));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,31 @@ import org.gradle.api.artifacts.ModuleIdentifier
import org.gradle.api.internal.artifacts.DefaultModuleIdentifier
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.gradle.buildinit.plugins.internal.BuildScriptBuilderFactory
import org.gradle.buildinit.plugins.internal.modifiers.BuildInitDsl
import org.gradle.util.RelativePathUtil

/**
* This script obtains the effective POM of the current project, reads its dependencies
* and generates build.gradle scripts. It also generates settings.gradle for multimodule builds. <br/>
* and generates build.gradle scripts. It also generates settings.gradle for multi-module builds. <br/>
*
* It currently supports both single-module and multi-module POMs, inheritance, dependency management, properties - everything.
*/
class Maven2Gradle {
final BuildScriptBuilderFactory scriptBuilderFactory

def dependentWars = []
def qualifiedNames
def workingDir
def effectivePom

Logger logger = Logging.getLogger(getClass())
private Set<MavenProject> mavenProjects

Maven2Gradle(Set<MavenProject> mavenProjects, File workingDir) {
Maven2Gradle(Set<MavenProject> mavenProjects, File workingDir, BuildScriptBuilderFactory scriptBuilderFactory) {
assert !mavenProjects.empty: "No Maven projects provided."
this.mavenProjects = mavenProjects
this.workingDir = workingDir.canonicalFile;
this.workingDir = workingDir.canonicalFile
this.scriptBuilderFactory = scriptBuilderFactory
}

def convert() {
Expand All @@ -62,7 +65,7 @@ class Maven2Gradle {

if (multimodule) {
def allProjects = this.effectivePom.project
qualifiedNames = generateSettings(workingDir.getName(), allProjects[0].artifactId, allProjects);
generateSettings(allProjects[0].artifactId, allProjects)
def dependencies = [:];
allProjects.each { project ->
dependencies[project.artifactId.text()] = getDependencies(project, allProjects)
Expand Down Expand Up @@ -162,7 +165,7 @@ ${globalExclusions(this.effectivePom)}
build += '//packaging tests'
build += packageTests;
}
generateSettings(workingDir.getName(), this.effectivePom.artifactId, null);
generateSettings(this.effectivePom.artifactId, null);
}
def buildFile = new File(workingDir, "build.gradle")
if (buildFile.exists()) {
Expand Down Expand Up @@ -450,13 +453,11 @@ artifacts.archives packageTests
return new File(project.build.directory.text()).parentFile
}

private def generateSettings(def dirName, def mvnProjectName, def projects) {
def qualifiedNames = [:]
def projectName = "";
if (dirName != mvnProjectName) {
projectName = """rootProject.name = '${mvnProjectName}'
"""
}
private void generateSettings(def mvnProjectName, def projects) {
def scriptBuilder = scriptBuilderFactory.script(BuildInitDsl.GROOVY, "settings")

scriptBuilder.propertyAssignment(null, "rootProject.name", mvnProjectName as String)

def modulePoms = modules(projects, true)

List<String> moduleNames = new ArrayList<String>();
Expand All @@ -467,28 +468,25 @@ artifacts.archives packageTests
File projectDirectory = projectDir(project)
// don't add project if it's the rootproject
if (!workingDir.equals(projectDirectory)) {
artifactIdToDir[fqn] = RelativePathUtil.relativePath(workingDir, projectDirectory)
moduleNames.add(fqn)

// Calculate the path to the project, ignore if its the default value
def relativePath = RelativePathUtil.relativePath(workingDir, projectDirectory)
if (fqn != ":${relativePath}") {
artifactIdToDir[fqn] = relativePath
}
}
}
}
File settingsFile = new File(workingDir, "settings.gradle")
if (settingsFile.exists()) {
settingsFile.renameTo(new File(workingDir, "settings.gradle.bak"))
}
StringBuffer settingsText = new StringBuffer(projectName)
if (moduleNames.size() > 0) {
moduleNames.each {
settingsText.append("include '$it'\n")
}
}

moduleNames.each {
scriptBuilder.methodInvocation(null, "include", it)
}
artifactIdToDir.each { entry ->
settingsText.append("""
project('$entry.key').projectDir = """ + '"$rootDir/' + "${entry.value}" + '" as File')
def dirExpression = scriptBuilder.methodInvocationExpression("file", entry.value)
scriptBuilder.propertyAssignment(null, "project('$entry.key').projectDir", dirExpression)
}
settingsFile.text = settingsText.toString()
return qualifiedNames
scriptBuilder.create().generate()
}

/**
Expand Down
Loading