diff --git a/build/maven.go b/build/maven.go index 970c139..584eda1 100644 --- a/build/maven.go +++ b/build/maven.go @@ -46,6 +46,8 @@ type MavenModule struct { outputWriter io.Writer // Path to the build info temp file that will be generated by the maven extractor. buildInfoPath string + // Path to the root project directory in maven multi-module project. May contain .mvn directory. + rootProjectDir string } // Maven extractor is the engine for calculating the project dependencies. @@ -161,6 +163,7 @@ func (mm *MavenModule) createMvnRunConfig() (*mvnRunConfig, error) { buildInfoProperties: extractorProps, mavenOpts: mm.extractorDetails.mavenOpts, logger: mm.containingBuild.logger, + rootProjectDir: mm.rootProjectDir, }, nil } @@ -288,6 +291,10 @@ func (mm *MavenModule) extractMavenPath(mavenVersionOutput bytes.Buffer) (mavenH return } +func (mm *MavenModule) SetRootProjectDir(rootDir string) { + mm.rootProjectDir = rootDir +} + func downloadMavenExtractor(downloadTo string, downloadExtractorFunc func(downloadTo, downloadPath string) error, logger utils.Log) error { filename := fmt.Sprintf(MavenExtractorFileName, MavenExtractorDependencyVersion) filePath := fmt.Sprintf(MavenExtractorRemotePath, MavenExtractorDependencyVersion) @@ -313,7 +320,7 @@ func (config *mvnRunConfig) GetCmd() *exec.Cmd { cmd = append(cmd, "-DbuildInfoConfig.propertiesFile="+config.buildInfoProperties) cmd = append(cmd, "-Dm3plugin.lib="+config.pluginDependencies) cmd = append(cmd, "-Dclassworlds.conf="+config.cleassworldsConfig) - cmd = append(cmd, "-Dmaven.multiModuleProjectDirectory="+config.workspace) + cmd = append(cmd, "-Dmaven.multiModuleProjectDirectory="+config.rootProjectDir) if config.mavenOpts != nil { cmd = append(cmd, config.mavenOpts...) } @@ -334,6 +341,7 @@ type mvnRunConfig struct { mavenOpts []string logger utils.Log outputWriter io.Writer + rootProjectDir string } func (config *mvnRunConfig) SetOutputWriter(outputWriter io.Writer) *mvnRunConfig { diff --git a/build/maven_test.go b/build/maven_test.go index a6cb8f6..c52a047 100644 --- a/build/maven_test.go +++ b/build/maven_test.go @@ -180,3 +180,35 @@ func TestAddColorToCmdOutput(t *testing.T) { }) } } + +func TestCommandWithRootProjectDir(t *testing.T) { + mvnc := &mvnRunConfig{ + java: "myJava", + plexusClassworlds: "myPlexus", + cleassworldsConfig: "myCleassworldsConfig", + mavenHome: "myMavenHome", + pluginDependencies: "myPluginDependencies", + workspace: "myWorkspace", + goals: []string{"myGoal1", "myGoal2"}, + buildInfoProperties: "myBuildInfoProperties", + mavenOpts: []string{"myMavenOpt1", "myMavenOpt2"}, + logger: nil, + outputWriter: nil, + rootProjectDir: "myRootProjectDir", + } + cmd := mvnc.GetCmd() + assert.Equal(t, "myJava", cmd.Args[0]) + assert.Equal(t, "-classpath", cmd.Args[1]) + assert.Equal(t, "myPlexus", cmd.Args[2]) + assert.Contains(t, cmd.Args, "-DbuildInfoConfig.propertiesFile=myBuildInfoProperties") + assert.Contains(t, cmd.Args, "-Dclassworlds.conf=myCleassworldsConfig") + assert.Contains(t, cmd.Args, "-Dclassworlds.conf=myCleassworldsConfig") + assert.Contains(t, cmd.Args, "-Dmaven.home=myMavenHome") + assert.Contains(t, cmd.Args, "-Dm3plugin.lib=myPluginDependencies") + assert.Contains(t, cmd.Args, "myGoal1") + assert.Contains(t, cmd.Args, "myGoal2") + assert.Contains(t, cmd.Args, "-DbuildInfoConfig.propertiesFile=myBuildInfoProperties") + assert.Contains(t, cmd.Args, "myMavenOpt1") + assert.Contains(t, cmd.Args, "myMavenOpt2") + assert.Contains(t, cmd.Args, "-Dmaven.multiModuleProjectDirectory=myRootProjectDir") +}