You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2026/04/19 22:14:00 UTC
[jira] [Updated] (GROOVY-11666) Incremental compilation in groovyc Ant task is not working properly
[ https://issues.apache.org/jira/browse/GROOVY-11666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King updated GROOVY-11666:
-------------------------------
Component/s: Ant integration
> Incremental compilation in groovyc Ant task is not working properly
> -------------------------------------------------------------------
>
> Key: GROOVY-11666
> URL: https://issues.apache.org/jira/browse/GROOVY-11666
> Project: Groovy
> Issue Type: Bug
> Components: Ant integration
> Affects Versions: 4.0.26
> Reporter: Björn Kautler
> Assignee: Eric Milles
> Priority: Major
> Fix For: 5.0.0-beta-2
>
> Attachments: screenshot-1.png
>
>
> Given this small MCVE:
> {code:none}
> ./build.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <project name="foo" xmlns:groovy="antlib:org.codehaus.groovy.ant" xmlns:ivy="antlib:org.apache.ivy.ant">
> <property name="config.ivy.version" value="2.2.0"/>
> <property name="lib.dir" location="build/libs"/>
> <property name="ivy.jar.dir" location="${lib.dir}/ivy"/>
> <property name="ivy.jar.filename" value="ivy-${config.ivy.version}.jar"/>
> <property name="ivy.jar.file" location="${ivy.jar.dir}/${ivy.jar.filename}"/>
> <target name="check-ivy">
> <available property="ivy.jar.present"
> file="${ivy.jar.file}"
> type="file"/>
> </target>
> <target name="download-ivy" depends="check-ivy" unless="ivy.jar.present">
> <mkdir dir="${ivy.jar.dir}"/>
> <get src="https://repo.maven.apache.org/maven2/org/apache/ivy/ivy/${config.ivy.version}/ivy-${config.ivy.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/>
> </target>
> <target name="init-ivy" depends="download-ivy" unless="ivy.done">
> <property name="ivy.retrieve.pattern" value="${lib.dir}/[conf]/[artifact](-[classifier]).[ext]"/>
> <taskdef resource="org/apache/ivy/ant/antlib.xml" classpath="${ivy.jar.file}" loaderref="ivy.loader" uri="antlib:org.apache.ivy.ant"/>
> </target>
> <target name="retrieve" description="retrieve the dependencies" depends="init-ivy" unless="ivy.done">
> <ivy:retrieve sync="true"/>
> <ivy:retrieve pattern="${lib.dir}/ivy/[artifact]-[revision].[ext]" organisation="org.apache.ivy" module="ivy" revision="${config.ivy.version}" conf="default" inline="true"/>
> <property name="ivy.done" value="true"/>
> </target>
> <target name="compile" depends="retrieve">
> <mkdir dir="build/classes/main"/>
> <taskdef resource="org/codehaus/groovy/antlib.xml" uri="antlib:org.codehaus.groovy.ant">
> <classpath>
> <fileset dir="${lib.dir}/groovy-ant" includes="*.jar"/>
> </classpath>
> </taskdef>
> <groovy:groovyc srcdir="src" destdir="build/classes/main">
> <classpath>
> <fileset dir="${lib.dir}/compile" includes="*.jar"/>
> </classpath>
> </groovy:groovyc>
> </target>
> </project>
> ./ivy.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://ant.apache.org/ivy/schemas/ivy.xsd">
> <info organisation="foo" module="foo"/>
> <configurations>
> <conf name="compile" description="Compile dependencies" visibility="private" transitive="false"/>
> <conf name="groovy-ant" description="Dependencies for Groovy Ant tasks" visibility="private"/>
> </configurations>
> <dependencies defaultconfmapping="%->default">
> <dependency org="org.apache.groovy" name="groovy" rev="4.0.26" conf="compile"/>
> <dependency org="org.apache.groovy" name="groovy-ant" rev="4.0.26" conf="groovy-ant"/>
> <dependency org="org.apache.groovy" name="groovy-groovydoc" rev="4.0.26" conf="groovy-ant"/>
> </dependencies>
> </ivy-module>
> ./src/Bar.groovy
> class Bar {
> def foo = new Foo()
> }
> ./src/Foo.groovy
> class Foo {
> }
> {code}
> If you now do {{ant compile}}, everything works just fine.
> Now modify only the class {{Bar}} in some way (that does not remove the reference to {{Foo}}).
> And now run {{ant compile}} again.
> The {{groovyc}} task wants to be nice and only compile the changed {{Bar}} class, but it fails with {{2: unable to resolve class Foo}}.
> The {{groovyc}} task should probably automatically contain its destination directory in the classpath to fix this.
> This is also the work-around I am using, by adding {{<pathelement location="build/classes/main"/>}} inside the {{<classpath>}}.
> This makes the incremental compiling work as expected as now the previously compiled classes are part of the classpath and can be found.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)