[ https://issues.apache.org/jira/browse/NPANDAY-486?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lars Corneliussen updated NPANDAY-486: -------------------------------------- Description: The current MSBuild integration is a hack. It was initially implemented as a dotnet-maven-plugin, but now also the Java binding has been forked from the originally generated source. h2. How it works now In order to "activate" MSBuild, the plugin {{{NPanday.Plugin.Msbuild.JavaBinding}}} must be configured: {code} <plugin> <groupId>org.apache.npanday.plugins</groupId> <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> {code} Also currently, code generated by MSBuild seems to have to be included manually! {code:title=from NPANDAY_328_VS2010WpfProjectSupportTest} ... <includeSource>obj\x86\Debug\App.g.cs</includeSource> ... {code} It registers MsbuildMojo.java to the validate-phase, which performs these steps: * preExecute: If {{{copyDependencies}}} is {{{true}}} (is true by default), it will copy all dependencies of the current project to (!) {{{basedir/bin/Debug}}} * preExecute: Then it adds all *.resource-files from (!) {{{obj/Debug}}} to project resources (using {{{project.addResource}}} ** (?) How can it even know theese, before having executed msbuild? Looks like this won't have any effect, before the second build runs. * Execute: Calls into {{{MsbuildMojo.cs}}} ** Searches for {{{projectName.csproj/vbproj}}} ** Runs with: {{{/v:q /p:BuildProjectReferences=false /p:BuildingInsideVisualStudio=true}}} ** Deletes h2. How it should work This is still to be figured out. Let's collect some requirements: h3. Functional Requirements (high-level) * It must be possible to compile WPF-projects (with Xaml-files) * any more? h3. Conditions / Design Decisions * The Maven principle of reproducible builds must be met. * Dependencies from pom must override those specified in the build file * Correct versions of dependencies must be ensured * Project-references must be resolved inside the reactor, if possible. * Generated code or resource must automatically be added to the POM (in-memory?) * Msbuild targets should run in appropriate maven phase (not in validate!) * Msbuild error-handling must h3. Msbuild Default Lifecycle Draft {color:red}red: changes to maven-compile-plugin lifecycle{color} {color:green}green: msbuild concern{color} *validate* - NPanday Plugins : maven-compile-plugin : initialize {color:red}Necessary?: runs {{{assemblyResolver.resolveTransitivelyFor}}} and {{{assemblerContext.init}}}{color} - NPanday Plugins : maven-resolver-plugin : resolve - NPanday Plugins : NPanday.Plugin.Settings.JavaBinding : generate-settings - {color:green}NPanday Plugins : msbuild-maven-plugin : initialize (finds the MSBuild file and validates that msbuild is available?){color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *shaddow* (creates msbuild-file, overrides dependencies and output; figures out parametrization){color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *shaddow-test* (creates msbuild-file for testing and figures out parametrization){color} *on generate-sources* - {color:red}-NPanday Plugins : maven-compile-plugin : generate-assembly-info-{color} *on process-sources* - {color:red}-NPanday Plugins : maven-compile-plugin : process-sources-{color} - {color:red}-NPanday Plugins : maven-compile-plugin : process-test-sources-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *shadow-assembly-info* (should share code with generate-assembly-info){color} *on process-resources* - NPanday Plugins : maven-resgen-plugin : copy-resources {color:red}Should this still be supported?{color} - NPanday Plugins : maven-resgen-plugin : generate - NPanday Plugins : maven-resgen-plugin : generate-existing-resx-to-resource *on compile* - {color:red}-NPanday Plugins : maven-compile-plugin : compile-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *build*{color} *on test-compile* - {color:red}-NPanday Plugins : maven-compile-plugin : testCompile-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *testBuild*{color} *on test* - NPanday Plugins : maven-test-plugin : test {color:green}*verify*{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : *verify* (Make sure the main artifact was generated by msbuild){color} *on install* - NPanday Plugins : maven-repository-plugin : convert-artifact - NPanday Plugins : maven-install-plugin : install - Maven Plugins : maven-install-plugin : install *on deploy* - Maven Plugins : maven-deploy-plugin : deploy was: The current MSBuild integration is a hack. It was initially implemented as a dotnet-maven-plugin, but now also the Java binding has been forked from the originally generated source. h2. How it works now In order to "activate" MSBuild, the plugin {{{NPanday.Plugin.Msbuild.JavaBinding}}} must be configured: {code} <plugin> <groupId>org.apache.npanday.plugins</groupId> <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> {code} Also currently, code generated by MSBuild seems to have to be included manually! {code:title=from NPANDAY_328_VS2010WpfProjectSupportTest} ... <includeSource>obj\x86\Debug\App.g.cs</includeSource> ... {code} It registers MsbuildMojo.java to the validate-phase, which performs these steps: * preExecute: If {{{copyDependencies}}} is {{{true}}} (is true by default), it will copy all dependencies of the current project to (!) {{{basedir/bin/Debug}}} * preExecute: Then it adds all *.resource-files from (!) {{{obj/Debug}}} to project resources (using {{{project.addResource}}} ** (?) How can it even know theese, before having executed msbuild? Looks like this won't have any effect, before the second build runs. * Execute: Calls into {{{MsbuildMojo.cs}}} ** Searches for {{{projectName.csproj/vbproj}}} ** Runs with: {{{/v:q /p:BuildProjectReferences=false /p:BuildingInsideVisualStudio=true}}} ** Deletes h2. How it should work This is still to be figured out. Let's collect some requirements: h3. Functional Requirements (high-level) * It must be possible to compile WPF-projects (with Xaml-files) * any more? h3. Conditions / Design Decisions * The Maven principle of reproducible builds must be met. * Dependencies from pom must override those specified in the build file * Correct versions of dependencies must be ensured * Project-references must be resolved inside the reactor, if possible. * Generated code or resource must automatically be added to the POM (in-memory?) * Msbuild targets should run in appropriate maven phase (not in validate!) * Msbuild error-handling must h3. Msbuild Default Lifecycle Draft {color:red}red: changes to maven-compile-plugin lifecycle{color} {color:green}green: msbuild concern{color} *validate* - NPanday Plugins : maven-compile-plugin : initialize {color:red}Necessary?: runs {{{assemblyResolver.resolveTransitivelyFor}}} and {{{assemblerContext.init}}}{color} - NPanday Plugins : maven-resolver-plugin : resolve - NPanday Plugins : NPanday.Plugin.Settings.JavaBinding : generate-settings - {color:green}NPanday Plugins : msbuild-maven-plugin : initialize (finds the MSBuild file and validates that msbuild is available?){color} - {color:green}NPanday Plugins : msbuild-maven-plugin : shaddow (creates msbuild-file and figures out parametrization){color} - {color:green}NPanday Plugins : msbuild-maven-plugin : shaddow-test (creates msbuild-file for testing and figures out parametrization){color} *on generate-sources* - {color:red}-NPanday Plugins : maven-compile-plugin : generate-assembly-info-{color:red} *on process-sources* - {color:red}-NPanday Plugins : maven-compile-plugin : process-sources-{color} - {color:red}-NPanday Plugins : maven-compile-plugin : process-test-sources-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : shadow-assembly-info (should share code with generate-assembly-info){color} *on process-resources* - NPanday Plugins : maven-resgen-plugin : copy-resources {color:red}Should this still be supported?{color} - NPanday Plugins : maven-resgen-plugin : generate - NPanday Plugins : maven-resgen-plugin : generate-existing-resx-to-resource *on compile* - {color:red}-NPanday Plugins : maven-compile-plugin : compile-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : build{color} *on test-compile* - {color:red}-NPanday Plugins : maven-compile-plugin : testCompile-{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : testBuild{color} *on test* - NPanday Plugins : maven-test-plugin : test {color:green}*verify*{color} - {color:green}NPanday Plugins : msbuild-maven-plugin : verify (Make sure the main artifact was generated by msbuild){color} *on install* - NPanday Plugins : maven-repository-plugin : convert-artifact - NPanday Plugins : maven-install-plugin : install - Maven Plugins : maven-install-plugin : install *on deploy* - Maven Plugins : maven-deploy-plugin : deploy > Implement integrated XBuild/MSBuild lifecycle (superseeds current MSBuild > integration) > -------------------------------------------------------------------------------------- > > Key: NPANDAY-486 > URL: https://issues.apache.org/jira/browse/NPANDAY-486 > Project: NPanday > Issue Type: New Feature > Components: Maven Plugins > Affects Versions: 1.4-incubating > Environment: Windows/.NET: MSBuild; Mono: Xbuild > Reporter: Lars Corneliussen > Assignee: Lars Corneliussen > > The current MSBuild integration is a hack. It was initially implemented as a > dotnet-maven-plugin, but now also the Java binding has been forked from the > originally generated source. > h2. How it works now > In order to "activate" MSBuild, the plugin > {{{NPanday.Plugin.Msbuild.JavaBinding}}} must be configured: > {code} > <plugin> > <groupId>org.apache.npanday.plugins</groupId> > <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId> > <executions> > <execution> > <goals> > <goal>compile</goal> > </goals> > </execution> > </executions> > </plugin> > {code} > Also currently, code generated by MSBuild seems to have to be included > manually! > {code:title=from NPANDAY_328_VS2010WpfProjectSupportTest} > ... > <includeSource>obj\x86\Debug\App.g.cs</includeSource> > ... > {code} > It registers MsbuildMojo.java to the validate-phase, which performs these > steps: > * preExecute: If {{{copyDependencies}}} is {{{true}}} (is true by default), > it will copy all dependencies of the current project to (!) > {{{basedir/bin/Debug}}} > * preExecute: Then it adds all *.resource-files from (!) {{{obj/Debug}}} to > project resources (using {{{project.addResource}}} > ** (?) How can it even know theese, before having executed msbuild? Looks > like this won't have any effect, before the second build runs. > * Execute: Calls into {{{MsbuildMojo.cs}}} > ** Searches for {{{projectName.csproj/vbproj}}} > ** Runs with: {{{/v:q /p:BuildProjectReferences=false > /p:BuildingInsideVisualStudio=true}}} > ** Deletes > h2. How it should work > This is still to be figured out. Let's collect some requirements: > h3. Functional Requirements (high-level) > * It must be possible to compile WPF-projects (with Xaml-files) > * any more? > h3. Conditions / Design Decisions > * The Maven principle of reproducible builds must be met. > * Dependencies from pom must override those specified in the build file > * Correct versions of dependencies must be ensured > * Project-references must be resolved inside the reactor, if possible. > * Generated code or resource must automatically be added to the POM > (in-memory?) > * Msbuild targets should run in appropriate maven phase (not in validate!) > * Msbuild error-handling must > h3. Msbuild Default Lifecycle Draft > {color:red}red: changes to maven-compile-plugin lifecycle{color} > {color:green}green: msbuild concern{color} > *validate* > - NPanday Plugins : maven-compile-plugin : initialize > {color:red}Necessary?: runs {{{assemblyResolver.resolveTransitivelyFor}}} and > {{{assemblerContext.init}}}{color} > - NPanday Plugins : maven-resolver-plugin : resolve > - NPanday Plugins : NPanday.Plugin.Settings.JavaBinding : generate-settings > - {color:green}NPanday Plugins : msbuild-maven-plugin : initialize (finds > the MSBuild file and validates that msbuild is available?){color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : *shaddow* (creates > msbuild-file, overrides dependencies and output; figures out > parametrization){color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : *shaddow-test* > (creates msbuild-file for testing and figures out parametrization){color} > *on generate-sources* > - {color:red}-NPanday Plugins : maven-compile-plugin : > generate-assembly-info-{color} > *on process-sources* > - {color:red}-NPanday Plugins : maven-compile-plugin : > process-sources-{color} > - {color:red}-NPanday Plugins : maven-compile-plugin : > process-test-sources-{color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : > *shadow-assembly-info* (should share code with generate-assembly-info){color} > *on process-resources* > - NPanday Plugins : maven-resgen-plugin : copy-resources {color:red}Should > this still be supported?{color} > - NPanday Plugins : maven-resgen-plugin : generate > - NPanday Plugins : maven-resgen-plugin : generate-existing-resx-to-resource > *on compile* > - {color:red}-NPanday Plugins : maven-compile-plugin : compile-{color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : *build*{color} > *on test-compile* > - {color:red}-NPanday Plugins : maven-compile-plugin : testCompile-{color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : *testBuild*{color} > *on test* > - NPanday Plugins : maven-test-plugin : test > {color:green}*verify*{color} > - {color:green}NPanday Plugins : msbuild-maven-plugin : *verify* (Make sure > the main artifact was generated by msbuild){color} > *on install* > - NPanday Plugins : maven-repository-plugin : convert-artifact > - NPanday Plugins : maven-install-plugin : install > - Maven Plugins : maven-install-plugin : install > *on deploy* > - Maven Plugins : maven-deploy-plugin : deploy -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira