maven-plugins/eclipse/plugin.jelly
michal db2436883d Smarter generation of .classpath file.
${basedir} prefix is cut off if present in any path.
Default locations of source and destination folder are used instead 
of hardcoded paths like 'target/classes'.


git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@113416 13f79535-47bb-0310-9956-ffa450edef68
2003-05-09 08:42:21 +00:00

265 lines
11 KiB
XML

<?xml version="1.0"?>
<project
xmlns:j="jelly:core"
xmlns:ant="jelly:ant"
xmlns:test="test">
<test:eclipse/>
<!--==================================================================-->
<!-- Generate Eclipse .project and .classpath files -->
<!--==================================================================-->
<goal name="eclipse"
description="Generate Eclipse project files"
prereqs="eclipse:generate-project, eclipse:generate-classpath">
<ant:echo>Now refresh your project in Eclipse (right click on the project and select "Refresh")</ant:echo>
</goal>
<goal name="eclipse:generate-project"
description="Generate Eclipse .project file">
<ant:echo>Creating ${basedir}/.project ...</ant:echo>
<j:file name="${basedir}/.project" prettyPrint="true" xmlns="dummy">
<projectDescription>
<name>${pom.artifactId}</name>
<comment>${pom.description}</comment>
<projects>
<j:forEach var="lib" items="${pom.artifacts}">
<j:set var="eclipseDependency"
value="${lib.dependency.getProperty('eclipse.dependency')}"/>
<j:if test="${eclipseDependency == 'true'}">
<project>${lib.dependency.artifactId}</project>
</j:if>
</j:forEach>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
</j:file>
</goal>
<!--==================================================================-->
<!-- Generate Eclipse .classpath file -->
<!--==================================================================-->
<goal name="eclipse:generate-classpath"
description="Generate Eclipse .classpath file">
<ant:echo>Creating ${basedir}/.classpath ...</ant:echo>
<j:file name="${basedir}/.classpath" prettyPrint="true" xmlns="dummy">
<classpath>
<j:if test="${sourcesPresent}">
<j:set var="srcDir" value="${pom.build.sourceDirectory}"/>
<j:if test="${ srcDir.startsWith( basedir ) }">
<ant:echo>Cutting of basedir from sourceDirectory</ant:echo>
<j:set var="srcDir" value="${srcDir.substring(basedir.length())}"/>
<!--
cut off also slash or backslash from basedir.
Is there a way to make it in one step in Jelly?
-->
<j:set var="srcDir" value="${srcDir.substring(1)}"/>
</j:if>
<classpathentry kind="src" path="${srcDir}"/>
</j:if>
<j:if test="${unitTestSourcesPresent}">
<j:set var="testSrcDir" value="${pom.build.unitTestSourceDirectory}"/>
<j:if test="${ testSrcDir.startsWith( basedir ) }">
<ant:echo>Cutting of basedir from testSourceDirectory</ant:echo>
<j:set var="testSrcDir" value="${testSrcDir.substring(basedir.length())}"/>
<!-- cut off also slash or backslash -->
<j:set var="testSrcDir" value="${testSrcDir.substring(1)}"/>
</j:if>
<classpathentry kind="src" path="${testSrcDir}"/>
<!-- Here are the rules:
If the project has maven.eclipse.junit property, add that ver of junit
If the project has maven.eclipse.junit property and it is empty, don't add junit
If the project has junit dep, use that.
Use the test plugin version
-->
<j:set var="verX" value="${maven.eclipse.junit}X"/>
<j:set var="depVersion">${pom.getPluginContext('maven-test-plugin').getVariable('plugin').getDependency('junit').getVersion()}</j:set>
<j:if test="${pom.getDependency('junit') != null}">
<j:set var="depVersion" value="${pom.getDependency('junit').getVersion()}"/>
</j:if>
<j:if test="${verX != 'X'}">
<j:set var="depVersion">${maven.eclipse.junit}</j:set>
</j:if>
<j:if test="${verX == 'noneX'}">
<j:set var="depVersion" value="none"/>
</j:if>
<j:if test="${depVersion != 'none'}">
<classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-${depVersion}.jar"/>
</j:if>
</j:if>
<classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
<j:forEach var="lib" items="${pom.artifacts}">
<j:set var="eclipseDependency"
value="${lib.dependency.getProperty('eclipse.dependency')}"/>
<j:choose>
<j:when test="${eclipseDependency == 'true'}">
<classpathentry kind="src" path="/${lib.dependency.artifactId}"/>
</j:when>
<j:when test="${lib.dependency.groupId == 'junit'}">
<!-- ignoring junit dependency as we've already created it -->
</j:when>
<j:otherwise>
<classpathentry kind="var" path="MAVEN_REPO${lib.urlPath}"/>
</j:otherwise>
</j:choose>
</j:forEach>
<!-- add the unit test build directory so that any files generated via Maven are available -->
<j:if test="${unitTestSourcesPresent}">
<j:set var="testOutputDir" value="${maven.eclipse.test.output.dir}"/>
<j:if test="${empty testOutputDir}">
<j:set var="testOutputDir"
value="${pom.getPluginContext('maven-test-plugin').getVariable('maven.test.dest')}"/>
</j:if>
<j:if test="${ testOutputDir.startsWith( basedir ) }">
<ant:echo>Cutting of basedir from testOutputDir</ant:echo>
<j:set var="testOutputDir" value="${testOutputDir.substring(basedir.length())}"/>
<!--
cut off also slash or backslash from basedir.
Is there a way to make it in one step in Jelly?
-->
<j:set var="testOutputDir" value="${testOutputDir.substring(1)}"/>
</j:if>
<classpathentry kind="lib" path="{$testOutputDir}"/>
</j:if>
<j:set var="outputDir" value="${maven.eclipse.output.dir}"/>
<j:if test="${empty outputDir}">
<j:set var="outputDir" value="${maven.build.dest}"/>
</j:if>
<j:if test="${ outputDir.startsWith( basedir ) }">
<ant:echo>Cutting of basedir from outputDir</ant:echo>
<j:set var="outputDir" value="${outputDir.substring(basedir.length())}"/>
<!--
cut off also slash or backslash from basedir.
Is there a way to make it in one step in Jelly?
-->
<j:set var="outputDir" value="${outputDir.substring(1)}"/>
</j:if>
<classpathentry kind="output" path="${outputDir}"/>
</classpath>
</j:file>
</goal>
<!--==================================================================-->
<!-- Generate Eclipse mappings for Maven goals -->
<!--==================================================================-->
<goal name="eclipse:external-tools"
description="Generate an Eclipse external tool for each goal">
<ant:mkdir dir="${maven.build.dir}/eclipse/"/>
<j:set var="toolFile" value="${maven.build.dir}/eclipse/externaltools.xml" />
<ant:echo>Creating ${toolFile}</ant:echo>
<j:set var="os" value="${os.name}" />
<j:set var="windows" value="${os.toLowerCase().indexOf('windows') != '-1'}"/>
<ant:echo>Adapting the generated file for a ${os} box.</ant:echo>
<!-- Strangely, j:file inserts a space between ${maven.home} and /bin/maven ... -->
<j:set var="tool.loc" value="${maven.home}${file.separator}bin${file.separator}maven"/>
<j:if test="${windows}">
<j:set var="tool.loc" value="${tool.loc}.bat"/>
</j:if>
<j:file name="${toolFile}" prettyPrint="true" xmlns="dummy">
<externaltools>
<j:set var="project" value="${org.apache.commons.jelly.werkz.Project}"/>
<j:forEach var="goal" items="${project.goals}">
<j:set var="maven.eclipse.generate" value="false"/>
<j:set var="allGoals" value="${maven.eclipse.goals}" />
<j:choose>
<j:when test="${allGoals == 'all'}">
<j:set var="maven.eclipse.generate" value="true"/>
</j:when>
<j:otherwise>
<j:if test="${goal.name.indexOf(':') == '-1'}">
<j:set var="maven.eclipse.generate" value="true"/>
</j:if>
</j:otherwise>
</j:choose>
<j:if test="${maven.eclipse.generate}">
<tool>
<entry key="!{tool_refresh}">$${project}</entry>
<entry key="!{tool_show_log}">true</entry>
<entry key="!{tool_loc}">${tool.loc}</entry>
<entry key="!{tool_args}">-e -p $${resource_loc} ${goal.name}</entry>
<entry key="!{tool_block}">false</entry>
<entry key="!{tool_type}">org.eclipse.ui.externaltools.type.program</entry>
<entry key="!{tool_dir}">$${container_loc}</entry>
<entry key="!{tool_build_types}"></entry>
<entry key="!{tool_name}">Maven ${goal.name}</entry>
</tool>
</j:if>
</j:forEach>
</externaltools>
</j:file>
<j:set var="ws" value="${maven.eclipse.workspace}X" />
<j:if test='${ws != "X"}'>
<j:set var="toDir" value="${maven.eclipse.workspace}/.metadata/.plugins/org.eclipse.ui.externaltools/" />
<ant:copy file="${toolFile}" todir="${toDir}"/>
</j:if>
<j:if test='${ws == "X"}'>
<ant:echo>
Please set maven.eclipse.workspace to the location of your eclipse workspace.
Alternatively, copy
${maven.build.dir}/eclipse/externaltools.xml
to
[maven.eclipse.workspace]/.metadata/.plugins/org.eclipse.ui.externaltools/externaltools.xml
</ant:echo>
</j:if>
</goal>
<!--==================================================================-->
<!-- Add MAVEN_REPO to classpath variables -->
<!--==================================================================-->
<goal name="eclipse:add-maven-repo"
description="Ensure that the classpath variable MAVEN_REPO is available">
<j:set var="ws" value="${maven.eclipse.workspace}X" />
<j:choose>
<j:when test='${ws != "X"}'>
<j:set var="variableFile" value="${maven.eclipse.workspace}/.metadata/.plugins/org.eclipse.jdt.core/pref_store.ini" />
<ant:propertyfile file="${variableFile}">
<ant:entry key="org.eclipse.jdt.core.classpathVariable.MAVEN_REPO"
default="${maven.repo.local}" />
</ant:propertyfile>
</j:when>
<j:otherwise>The property $${maven.eclipse.workspace} was not set. MAVEN_REPO may not be set.</j:otherwise>
</j:choose>
</goal>
</project>