Author: brett Date: Thu Aug 11 14:09:28 2011 New Revision: 1156622 URL: http://svn.apache.org/viewvc?rev=1156622&view=rev Log: [NPANDAY-459] Don't traverse project references when building with MSBuild, and ensure that the project's artifacts are in place where MSBuild would expect to find them
Modified: incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs Modified: incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java?rev=1156622&r1=1156621&r2=1156622&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java (original) +++ incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java Thu Aug 11 14:09:28 2011 @@ -21,12 +21,17 @@ package NPanday.Plugin.Msbuild; import java.io.File; import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import npanday.plugin.FieldAnnotation; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Resource; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; /** @@ -55,6 +60,11 @@ public class MsbuildMojo private org.apache.maven.project.MavenProject project; /** + * @parameter expression = "${reactorProjects}" + */ + private List<org.apache.maven.project.MavenProject> reactorProjects; + + /** * @parameter expression = "${settings.localRepository}" */ private String localRepository; @@ -150,15 +160,36 @@ public class MsbuildMojo { if ( copyReferences ) { + Map<String,MavenProject> projects = new HashMap<String,MavenProject>(); + for ( MavenProject p : reactorProjects ) + { + projects.put( ArtifactUtils.versionlessKey( p.getGroupId(), p.getArtifactId() ), p ); + } + getLog().info( "projects = " + projects.keySet() ); + for ( Object artifact : project.getDependencyArtifacts() ) { Artifact a = (Artifact) artifact; - String path = - a.getGroupId() + "/" + a.getArtifactId() + "-" + a.getBaseVersion() + "/" + a.getArtifactId() + "." + - a.getArtifactHandler().getExtension(); - File targetFile = new File( referencesDirectory, path ); - + File targetDir; + String vKey = ArtifactUtils.versionlessKey( a ); + if ( !projects.containsKey( vKey ) ) + { + String path = + a.getGroupId() + "/" + a.getArtifactId() + "-" + a.getBaseVersion(); + targetDir = new File( referencesDirectory, path ); + } + else + { + // Likely a project reference in MSBuild. + // If the other project was not built with MSBuild, make sure the artifact is present where it will look for it + // Note: deliberately limited for now - will only work with reactor projects and doesn't test what are references and what are not + // TODO: support other configurations, or more aligned MSBuild-based builds + targetDir = new File( projects.get( vKey ).getBasedir(), "bin/Debug" ); + } + File targetFile = new File( targetDir, a.getArtifactId() + "." + a.getArtifactHandler().getExtension() ); + + getLog().info( "Copying reference " + vKey + " to " + targetFile ); if ( !targetFile.exists() ) { targetFile.getParentFile().mkdirs(); Modified: incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs?rev=1156622&r1=1156621&r2=1156622&view=diff ============================================================================== --- incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs (original) +++ incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs Thu Aug 11 14:09:28 2011 @@ -75,8 +75,9 @@ namespace NPanday.Plugin.Msbuild } // must use /v:q here, as /v:m and above report the csc command, that includes '/errorprompt', which // erroneously triggers the NPANDAY-063-001 error + // BuildingInsideVisualStudio is required to avoid building project references on framework 2.0 ProcessStartInfo processStartInfo = - new ProcessStartInfo("msbuild", "/v:q " + projectName); + new ProcessStartInfo("msbuild", "/v:q /p:BuildProjectReferences=false /p:BuildingInsideVisualStudio=true " + projectName); processStartInfo.UseShellExecute = false; Process p = System.Diagnostics.Process.Start(processStartInfo); p.WaitForExit();