Author: brett
Date: Tue Jul  8 05:11:45 2014
New Revision: 1608662

URL: http://svn.apache.org/r1608662
Log:
[NPANDAY-203] move MSBuild plugin to use dotnet-msbuild

Removed:
    incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/pom.xml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample.sln
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/App.xaml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/App.xaml.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Properties/AssemblyInfo.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Properties/Resources.Designer.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Properties/Resources.resx
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Properties/Settings.Designer.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Properties/Settings.settings
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Window1.xaml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/Window1.xaml.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/WpfApplicationExample.csproj
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/WpfApplicationExample/pom.xml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/it/IT001/pom.xml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday.Plugin.Msbuild.csproj
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/src/main/csharp/NPanday/Plugin/Msbuild/MsbuildMojo.cs
Modified:
    
incubator/npanday/trunk/components/dotnet-msbuild/src/main/java/npanday/msbuild/MsbuildInvocationParameters.java
    
incubator/npanday/trunk/components/dotnet-msbuild/src/main/resources/META-INF/npanday/executable-plugins.xml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/pom.xml
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/src/main/java/NPanday/Plugin/Msbuild/MsbuildMojo.java

Modified: 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/java/npanday/msbuild/MsbuildInvocationParameters.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-msbuild/src/main/java/npanday/msbuild/MsbuildInvocationParameters.java?rev=1608662&r1=1608661&r2=1608662&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/java/npanday/msbuild/MsbuildInvocationParameters.java
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/java/npanday/msbuild/MsbuildInvocationParameters.java
 Tue Jul  8 05:11:45 2014
@@ -25,6 +25,7 @@ import com.google.common.collect.Maps;
 import npanday.vendor.VendorRequirement;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -40,6 +41,10 @@ public class MsbuildInvocationParameters
 
     private Map<String, String> properties = Maps.newHashMap();
 
+    private String verbosity;
+
+    private List<String> extraArguments = new ArrayList<String>();
+
     public MsbuildInvocationParameters(
         VendorRequirement vendor, File file )
     {
@@ -67,15 +72,37 @@ public class MsbuildInvocationParameters
     {
         List<String> commands = Lists.newArrayList();
 
-        // TODO: support /target, /maxcpucount, /toolsversion, /verbosity
+        // TODO: support /target, /maxcpucount, /toolsversion
+
+        if ( verbosity != null ) {
+            commands.add( "/v:" + verbosity );
+        }
 
         for ( Map.Entry<String, String> propEntry : properties.entrySet() )
         {
             commands.add( "/p:" + propEntry.getKey() + "=" + 
propEntry.getValue() );
         }
 
+        commands.addAll(extraArguments);
+
         commands.add( file.getAbsolutePath() );
 
         return commands;
     }
+
+    public void setVerbosity(String verbosity) {
+        this.verbosity = verbosity;
+    }
+
+    public String getVerbosity() {
+        return verbosity;
+    }
+
+    public List<String> getExtraArguments() {
+        return extraArguments;
+    }
+
+    public void addExtraArguments(List<String> extraArgs) {
+        extraArguments.addAll(extraArgs);
+    }
 }

Modified: 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/resources/META-INF/npanday/executable-plugins.xml
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-msbuild/src/main/resources/META-INF/npanday/executable-plugins.xml?rev=1608662&r1=1608661&r2=1608662&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/resources/META-INF/npanday/executable-plugins.xml
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-msbuild/src/main/resources/META-INF/npanday/executable-plugins.xml
 Tue Jul  8 05:11:45 2014
@@ -35,5 +35,12 @@
         <operatingSystem>Windows</operatingSystem>
       </platform>
     </platforms>
+    <probingPaths>
+      <!-- TODO: this should be broken up as CSC is, just means for now you 
always get newest available tools version, but will target right framework -->
+      
<probingPath>${HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\12.0@MSBuildToolsPath}</probingPath>
+      
<probingPath>${HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0@MSBuildToolsPath}</probingPath>
+      
<probingPath>${HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5@MSBuildToolsPath}</probingPath>
+      
<probingPath>${HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0@MSBuildToolsPath}</probingPath>
+    </probingPaths>
   </executablePlugin>
 </executablePlugins>

Modified: 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/pom.xml?rev=1608662&r1=1608661&r2=1608662&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/pom.xml
 (original)
+++ 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Msbuild/javabinding/pom.xml
 Tue Jul  8 05:11:45 2014
@@ -34,15 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.npanday</groupId>
-      <artifactId>dotnet-assembler</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.npanday</groupId>
-      <artifactId>dotnet-executable</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.npanday</groupId>
-      <artifactId>dotnet-plugin</artifactId>
+      <artifactId>dotnet-msbuild</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>

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=1608662&r1=1608661&r2=1608662&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
 Tue Jul  8 05:11:45 2014
@@ -27,13 +27,18 @@ import java.util.List;
 import java.util.Map;
 
 import npanday.LocalRepositoryUtil;
-import npanday.plugin.FieldAnnotation;
+import npanday.PlatformUnsupportedException;
+import npanday.msbuild.MsbuildException;
+import npanday.msbuild.MsbuildInvocationParameters;
+import npanday.msbuild.MsbuildInvoker;
 import npanday.resolver.NPandayDependencyResolution;
+import npanday.vendor.VendorRequirement;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.model.Resource;
+import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
@@ -46,21 +51,9 @@ import org.codehaus.plexus.util.FileUtil
  * @goal compile
  */
 public class MsbuildMojo
-    extends npanday.plugin.AbstractMojo
+    extends AbstractMojo
 {
     /**
-     * @parameter expression = "${settings.localRepository}"
-     */
-    @FieldAnnotation()
-    public java.lang.String repository;
-
-    /**
-     * @parameter expression = "${project}"
-     */
-    @FieldAnnotation()
-    public org.apache.maven.project.MavenProject mavenProject;
-
-    /**
      * @parameter expression = "${project}"
      */
     private org.apache.maven.project.MavenProject project;
@@ -93,12 +86,7 @@ public class MsbuildMojo
     /**
      * @component
      */
-    private npanday.executable.NetExecutableFactory netExecutableFactory;
-
-    /**
-     * @component
-     */
-    private npanday.plugin.PluginContext pluginContext;
+    private MsbuildInvoker msbuildInvoker;
 
     /**
      * @parameter default-value=".references"
@@ -108,7 +96,6 @@ public class MsbuildMojo
     /**
      * @parameter expression="${msbuild.configuration}" default-value="Debug"
      */
-    @FieldAnnotation()
     public String configuration;
 
     /**
@@ -143,77 +130,16 @@ public class MsbuildMojo
 
     /**
      * @parameter expression="${msbuild.extraArguments}"
+     * @deprecated use {@linkplain #extraArgs}. This does not support quoted 
strings containing spaces
      */
-    @FieldAnnotation()
     public String extraArguments;
 
     /**
-     * @parameter expression="${plugin.version}"
-     * @required
-     * @readonly
-     */
-    private String pluginVersion;
-
-    public String getMojoArtifactId()
-    {
-        return "NPanday.Plugin.Msbuild";
-    }
-
-    public String getMojoGroupId()
-    {
-        return "org.apache.npanday.plugins";
-    }
-
-    public String getClassName()
-    {
-        return "NPanday.Plugin.Msbuild.MsbuildMojo";
-    }
-
-    public npanday.plugin.PluginContext getNetPluginContext()
-    {
-        return pluginContext;
-    }
-
-    public npanday.executable.NetExecutableFactory getNetExecutableFactory()
-    {
-        return netExecutableFactory;
-    }
-
-    public org.apache.maven.project.MavenProject getMavenProject()
-    {
-        return project;
-    }
-
-    public String getLocalRepository()
-    {
-        return localRepository;
-    }
-
-    public String getVendorVersion()
-    {
-        return vendorVersion;
-    }
-
-    public String getVendor()
-    {
-        return vendor;
-    }
-
-    public String getFrameworkVersion()
-    {
-        return frameworkVersion;
-    }
-
-    /**
-     * The version of the .NET plugin to resolve, will typically match that of 
the Java wrapper.
+     * @parameter
      */
-    @Override
-    protected String getPluginVersion() {
-        return pluginVersion;
-    }
+    private List<String> extraArgs;
 
-    @Override
-    public boolean preExecute()
+    public final void execute()
         throws MojoExecutionException, MojoFailureException
     {
         Collection<Artifact> requiredArtifacts;
@@ -230,73 +156,84 @@ 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 );
+            copyDependencies(requiredArtifacts);
+        }
+
+        File msbuildFile = null;
+        for (String ext : new String[] { "csproj", "vbproj", "ccproj" }) {
+            msbuildFile = new File(project.getBuild().getSourceDirectory(), 
project.getArtifactId() + "." + ext);
+            if (msbuildFile.exists()) {
+                break;
             }
-            getLog().info( "projects = " + projects.keySet() );
+        }
+        if (msbuildFile == null) {
+            throw new MojoFailureException("No MSBuild project file found in 
the current directory");
+        }
+        MsbuildInvocationParameters params = new MsbuildInvocationParameters(
+                new VendorRequirement(vendor, vendorVersion, 
frameworkVersion), msbuildFile);
 
-            for ( Object artifact : requiredArtifacts )
-            {
-                Artifact a = (Artifact) artifact;
+        // 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
+        params.setVerbosity("q");
+
+        // BuildingInsideVisualStudio is required to avoid building project 
references on framework 2.0
+        params.setProperty("BuildProjectReferences", "false");
+        params.setProperty("BuildingInsideVisualStudio", "true");
 
-                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
-                    File binDir = new File( projects.get( vKey ).getBasedir(), 
"bin" );
-                    targetDir = new File( binDir, configuration );
-                }
-                File targetFile = new File( targetDir, a.getArtifactId() + "." 
+ a.getArtifactHandler().getExtension() );
-    
-                getLog().info( "Copying reference " + vKey + " to " + 
targetFile );
-                if ( !targetFile.exists() )
-                {
-                    targetFile.getParentFile().mkdirs();
+        if (configuration != null) {
+            params.setProperty("Configuration", configuration);
+        }
 
-                    try
-                    {
-                        FileUtils.copyFile( a.getFile(), targetFile );
-                    }
-                    catch ( IOException e )
-                    {
-                        throw new MojoExecutionException(
-                            "Error copying reference from the local repository 
to .references: " + e.getMessage(), e );
-                    }
-                }
-            }
+        if (extraArguments != null) {
+            params.addExtraArguments(Arrays.asList(extraArguments.split(" ")));
+        }
+        if (extraArgs != null) {
+            params.addExtraArguments(extraArgs);
+        }
+
+        try {
+            msbuildInvoker.invoke(params);
+        } catch (PlatformUnsupportedException e) {
+            throw new MojoExecutionException(e.getMessage(), e);
+        } catch (MsbuildException e) {
+            throw new MojoExecutionException(e.getMessage(), e);
         }
-        return super.preExecute();
-    }
 
-    @Override
-    public void postExecute()
-        throws MojoExecutionException, MojoFailureException
-    {
         // #12549 - add resources generated by MSBuild to the project
+        String directory = getMSBuildOutputDirectory();
+
+        addGeneratedResources(directory);
+
+        addGeneratedSources(directory);
+
+        if (attachXBAP) {
+            attachXBAPArtifact(directory);
+        }
+    }
+
+    private String getMSBuildOutputDirectory() {
         String directory = new File( project.getBasedir(), "obj" 
).getAbsolutePath();
         if ( platform != null )
         {
             directory += "/" + platform;
         }
         directory += "/" + configuration;
+        return directory;
+    }
 
-        getLog().info( "Adding resources from " + directory + " generated by 
MSBuild" );
-        Resource resource = new Resource();
-        resource.setDirectory( directory );
-        resource.addInclude( "**/*.resources" );
-        project.addResource( resource );
+    private void attachXBAPArtifact(String directory) {
+        projectHelper.attachArtifact(project, "xbap", new File(directory, 
project.getArtifactId() + ".xbap"));
+        File manifest = new File(directory, project.getArtifactId() + 
".exe.manifest");
+        if (manifest.exists()) {
+            getLog().info("Attaching manifest: " + manifest);
+            projectHelper.attachArtifact(project, "exe.manifest", manifest);
+        }
+        else {
+            getLog().debug("Manifest not found: " + manifest);
+        }
+    }
 
+    private void addGeneratedSources(String directory) throws 
MojoExecutionException {
         if ( new File( directory ).exists() ) {
             // Pick up generated source patterns to compile
             DirectoryScanner scanner = new DirectoryScanner();
@@ -315,7 +252,7 @@ public class MsbuildMojo
                     File dest = new File( generatedSourcesDirectory, f );
                     dest.getParentFile().mkdirs();
                     try {
-                        FileUtils.copyFile( src, dest );
+                        FileUtils.copyFile(src, dest);
                     } catch (IOException e) {
                         throw new MojoExecutionException("Unable to copy 
source file: " + e.getLocalizedMessage(), e);
                     }
@@ -323,23 +260,61 @@ public class MsbuildMojo
                 project.addCompileSourceRoot( 
generatedSourcesDirectory.getAbsolutePath() );
             }
         }
+    }
 
-        if (attachXBAP) {
-            projectHelper.attachArtifact(project, "xbap", new File(directory, 
project.getArtifactId() + ".xbap"));
-            File manifest = new File(directory, project.getArtifactId() + 
".exe.manifest");
-            if (manifest.exists()) {
-                getLog().info("Attaching manifest: " + manifest);
-                projectHelper.attachArtifact(project, "exe.manifest", 
manifest);
+    private void addGeneratedResources(String directory) {
+        getLog().info( "Adding resources from " + directory + " generated by 
MSBuild" );
+        Resource resource = new Resource();
+        resource.setDirectory( directory );
+        resource.addInclude( "**/*.resources" );
+        project.addResource( resource );
+    }
+
+    private void copyDependencies(Collection<Artifact> requiredArtifacts) 
throws MojoExecutionException {
+        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 : requiredArtifacts )
+        {
+            Artifact a = (Artifact) artifact;
+
+            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 {
-                getLog().debug("Manifest not found: " + manifest);
+            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
+                File binDir = new File( projects.get( vKey ).getBasedir(), 
"bin" );
+                targetDir = new File( binDir, configuration );
             }
-        }
-        super.postExecute();
-    }
+            File targetFile = new File( targetDir, a.getArtifactId() + "." + 
a.getArtifactHandler().getExtension() );
 
-    public ArtifactFactory getArtifactFactory()
-    {
-        return artifactFactory;
+            getLog().info( "Copying reference " + vKey + " to " + targetFile );
+            if ( !targetFile.exists() )
+            {
+                targetFile.getParentFile().mkdirs();
+
+                try
+                {
+                    FileUtils.copyFile(a.getFile(), targetFile);
+                }
+                catch ( IOException e )
+                {
+                    throw new MojoExecutionException(
+                        "Error copying reference from the local repository to 
.references: " + e.getMessage(), e );
+                }
+            }
+        }
     }
 }


Reply via email to