epugh 2004/07/04 09:20:28 Modified: eclipse plugin.properties eclipse/src/plugin-resources/templates classpath.jelly eclipse/src/plugin-test maven.xml eclipse/xdocs properties.xml Log: Add better support for generated sources Revision Changes Path 1.5 +1 -0 maven-plugins/eclipse/plugin.properties Index: plugin.properties =================================================================== RCS file: /home/cvs/maven-plugins/eclipse/plugin.properties,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- plugin.properties 4 Mar 2004 18:04:37 -0000 1.4 +++ plugin.properties 4 Jul 2004 16:20:28 -0000 1.5 @@ -24,3 +24,4 @@ # This accepts two values: 'all' for all the goals, # and 'plugins' to generate only the plugins' default goals. maven.eclipse.goals = plugins +maven.gen.src=${maven.build.dir}/generated-sources 1.17 +9 -0 maven-plugins/eclipse/src/plugin-resources/templates/classpath.jelly Index: classpath.jelly =================================================================== RCS file: /home/cvs/maven-plugins/eclipse/src/plugin-resources/templates/classpath.jelly,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- classpath.jelly 28 Jun 2004 22:07:32 -0000 1.16 +++ classpath.jelly 4 Jul 2004 16:20:28 -0000 1.17 @@ -27,6 +27,15 @@ trim="true"> <classpath> + <!-- Add any generated source directories as seperate src directories --> + <u:available file="${maven.gen.src}"> + <u:file var="genSrcRootDir" name="${maven.gen.src}"/> + <j:forEach var="genSrcDir" items="${genSrcRootDir.listFiles()}"> + <maven:makeRelativePath var="srcDir" basedir="${basedir}" path="${genSrcDir}"/> + <classpathentry kind="src" path="${srcDir}"/> + </j:forEach> + </u:available> + <j:if test="${sourcesPresent}"> <maven:makeRelativePath var="srcDir" basedir="${basedir}" path="${pom.build.sourceDirectory}"/> <j:set var="excluding" value=""/> 1.5 +82 -53 maven-plugins/eclipse/src/plugin-test/maven.xml Index: maven.xml =================================================================== RCS file: /home/cvs/maven-plugins/eclipse/src/plugin-test/maven.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- maven.xml 6 May 2004 05:43:12 -0000 1.4 +++ maven.xml 4 Jul 2004 16:20:28 -0000 1.5 @@ -20,7 +20,7 @@ xmlns:u="jelly:util" xmlns:x="jelly:xml"> - <goal name="testPlugin" prereqs="test-init,test-eclipse,test-natures,test-builders,test-natures-and-builders"> + <goal name="testPlugin" prereqs="test-init,test-eclipse,test-natures,test-builders,test-natures-and-builders,test-classpath-has-generated-source"> </goal> <goal name="test-init"> @@ -38,57 +38,86 @@ </goal> - <goal name="test-natures"> - <delete file="${dotProject}" failonerror="false"/> - <j:set var="maven.eclipse.projectnatures" value="n1,a.b.c.n2"/> - <attainGoal name="eclipse:generate-project"/> - - <assert:assertFileExists file="${dotProject}" /> - - <u:file var="projectFile" name="${dotProject}"/> - <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> - <x:set var="natures" select="$projectDoc/projectDescription/natures/nature"/> - <assert:assertEquals expected="n1" value="${natures[1].text}" msg="n1 is not the second nature"/> - <assert:assertEquals expected="a.b.c.n2" value="${natures[2].text}" msg="a.b.c.n2 is not the third nature"/> - </goal> - - <goal name="test-builders"> - <j:set var="maven.eclipse.buildcommands" value="c1,c2,c3"/> - <delete file="${dotProject}" failonerror="false"/> - <attainGoal name="eclipse:generate-project"/> - - <assert:assertFileExists file="${dotProject}" /> - <u:file var="projectFile" name="${dotProject}"/> - <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> - <x:set var="builders" select="$projectDoc/projectDescription/buildSpec/buildCommand/name"/> - - <assert:assertEquals expected="c1" value="${builders[1].text}" msg="c1 is not the second build command name"/> - <assert:assertEquals expected="c2" value="${builders[2].text}" msg="c2 is not the third build command name"/> - <assert:assertEquals expected="c3" value="${builders[3].text}" msg="c3 is not the fourth build command name"/> - </goal> - - - <goal name="test-natures-and-builders"> - <delete file="${dotProject}" failonerror="false"/> - <j:set var="maven.eclipse.projectnatures" value="n7,n9,n11"/> - <j:set var="maven.eclipse.buildcommands" value="c11,c21,c31"/> - <attainGoal name="eclipse:generate-project"/> - - <assert:assertFileExists file="${dotProject}" /> - <u:file var="projectFile" name="${dotProject}"/> - <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> - <x:set var="natures" select="$projectDoc/projectDescription/natures/nature"/> - <x:set var="builders" select="$projectDoc/projectDescription/buildSpec/buildCommand/name"/> - - <!-- check natures --> - <assert:assertEquals expected="n7" value="${natures[1].text}" msg="n7 is not the second nature"/> - <assert:assertEquals expected="n9" value="${natures[2].text}" msg="n9 is not the second nature"/> - <assert:assertEquals expected="n11" value="${natures[3].text}" msg="n11 is not the second nature"/> - - <!-- check builders --> - <assert:assertEquals expected="c11" value="${builders[1].text}" msg="c11 is not the second build command name"/> - <assert:assertEquals expected="c21" value="${builders[2].text}" msg="c21 is not the second build command name"/> - <assert:assertEquals expected="c31" value="${builders[3].text}" msg="c31 is not the second build command name"/> - </goal> + <goal name="test-natures"> + <delete file="${dotProject}" failonerror="false"/> + <j:set var="maven.eclipse.projectnatures" value="n1,a.b.c.n2"/> + <attainGoal name="eclipse:generate-project"/> + + <assert:assertFileExists file="${dotProject}" /> + + <u:file var="projectFile" name="${dotProject}"/> + <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> + <x:set var="natures" select="$projectDoc/projectDescription/natures/nature"/> + <assert:assertEquals expected="n1" value="${natures[1].text}" msg="n1 is not the second nature"/> + <assert:assertEquals expected="a.b.c.n2" value="${natures[2].text}" msg="a.b.c.n2 is not the third nature"/> + </goal> + + <goal name="test-builders"> + <j:set var="maven.eclipse.buildcommands" value="c1,c2,c3"/> + <delete file="${dotProject}" failonerror="false"/> + <attainGoal name="eclipse:generate-project"/> + + <assert:assertFileExists file="${dotProject}" /> + <u:file var="projectFile" name="${dotProject}"/> + <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> + <x:set var="builders" select="$projectDoc/projectDescription/buildSpec/buildCommand/name"/> + + <assert:assertEquals expected="c1" value="${builders[1].text}" msg="c1 is not the second build command name"/> + <assert:assertEquals expected="c2" value="${builders[2].text}" msg="c2 is not the third build command name"/> + <assert:assertEquals expected="c3" value="${builders[3].text}" msg="c3 is not the fourth build command name"/> + </goal> + + + <goal name="test-natures-and-builders"> + <delete file="${dotProject}" failonerror="false"/> + <j:set var="maven.eclipse.projectnatures" value="n7,n9,n11"/> + <j:set var="maven.eclipse.buildcommands" value="c11,c21,c31"/> + <attainGoal name="eclipse:generate-project"/> + + <assert:assertFileExists file="${dotProject}" /> + <u:file var="projectFile" name="${dotProject}"/> + <x:parse var="projectDoc" xml="${projectFile.toURL()}" /> + <x:set var="natures" select="$projectDoc/projectDescription/natures/nature"/> + <x:set var="builders" select="$projectDoc/projectDescription/buildSpec/buildCommand/name"/> + + <!-- check natures --> + <assert:assertEquals expected="n7" value="${natures[1].text}" msg="n7 is not the second nature"/> + <assert:assertEquals expected="n9" value="${natures[2].text}" msg="n9 is not the second nature"/> + <assert:assertEquals expected="n11" value="${natures[3].text}" msg="n11 is not the second nature"/> + + <!-- check builders --> + <assert:assertEquals expected="c11" value="${builders[1].text}" msg="c11 is not the second build command name"/> + <assert:assertEquals expected="c21" value="${builders[2].text}" msg="c21 is not the second build command name"/> + <assert:assertEquals expected="c31" value="${builders[3].text}" msg="c31 is not the second build command name"/> + </goal> + + <goal name="test-classpath-has-generated-source"> + <delete file="${dotProject}" failonerror="false"/> + <delete file="${dotClasspath}" failonerror="false"/> + <mkdir dir="${maven.gen.src}/gensrc1"/> + <mkdir dir="${maven.gen.src}/gensrc2"/> + <attainGoal name="eclipse"/> + + <assert:assertFileExists file="${dotProject}" /> + <assert:assertFileExists file="${dotClasspath}" /> + + <u:file var="classpathFile" name="${dotClasspath}"/> + <x:parse var="classpathDoc" xml="${classpathFile.toURL()}" /> + <!-- FIXME. This should filter where kind="src" --> + <x:set var="count" select="count($classpathDoc/classpath/classpathentry)"/> + <assert:assertEquals expected="5" value="${count.intValue().toString()}"/> + + </goal> + + <goal name="test1"> + <u:file var="dude" name="${maven.build.dir}"/> + <echo>Dude ${dude}</echo> + <echo>Dude Parent ${dude.parent}</echo> + <echo>Dude Parent ${dude.files}</echo> + <j:forEach var="file" items="${dude.listFiles()}"> + <echo>file ${file}</echo> + </j:forEach> + </goal> + </project> 1.11 +43 -2 maven-plugins/eclipse/xdocs/properties.xml Index: properties.xml =================================================================== RCS file: /home/cvs/maven-plugins/eclipse/xdocs/properties.xml,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- properties.xml 28 Jun 2004 22:07:31 -0000 1.10 +++ properties.xml 4 Jul 2004 16:20:28 -0000 1.11 @@ -81,7 +81,7 @@ the classpath, like <code>src/conf</code>. </td> </tr> - <tr> + <tr> <td>maven.eclipse.buildcommands</td> <td>Yes</td> <td> @@ -89,7 +89,7 @@ to include in the project description file. </td> </tr> - <tr> + <tr> <td>maven.eclipse.projectnatures</td> <td>Yes</td> <td> @@ -98,6 +98,16 @@ will be added after the java nature. </td> </tr> + <tr> + <td>maven.gen.src</td> + <td>Yes (default=${maven.build.dir}/generated-sources)</td> + <td> + The directory that generated source code is placed. Maven will select + any directories under this as source code. This prevents the generated + source from being removed whenever Eclipse does a clean build, and allows + the generated code to be clearly in the build directory. + </td> + </tr> </table> <p> Note that you will need to defined a <code>MAVEN_REPO</code> Java @@ -131,6 +141,37 @@ The inverse also works. If you have included extra jars that shouldn't be in the eclipse classpath then you can set <code>eclipse.dependency=false</code> </p> + </section> + <section name="Generated Source Code integration w/ Eclipse"> + <p> + When Eclipse is not generating source code for you there is a conflict between + Maven generating the source code and then Eclipse treating it as compiled code. + Typically when generating code using Maven the code ends up in the target/classes + directory. This is fine as long as Maven is doing the build. However, if Eclipse + is then setup to do the build, when Eclipse performs a clean build all the generated + code in target/classes will be removed. + </p> + <p> + The alternatives typically are to place the generated code in the /src/java directory + and allow Maven and Eclipse to treat it the same. However, this leads to a tendency + to check generated code into source control, which typically is not appropriate for + generated code. Alternatively, it can be placed in some sort of /src/generated or + target/generated directory. In Maven2, generated code lives in target/generated-sources, + in a manner similiar to generated xdoc's live in target/generated-xdocs. Within the + target/generated-sources would be each type of generated code. + </p> + <p> + For example, if you used the XDoclet Plugin for Maven to generate Hibernate mapping files, + they would be placed in /target/generated-sources/xdoclet/. While, if you used the + Hibernate Plugin for Maven to generate the SQL scripts for generating a database then that + would be placed in /target/generated-sources/schema/. + <br/> + Settings in project.properties: + <source> +maven.xdoclet.hibernatedoclet.destDir=${maven.build.dir}/generated-sources/xdoclet +maven.hibernate.output.dir=${maven.build.dir}/generated-sources/schema + </source> + </p> </section> </body> </document>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]