[ 
https://issues.apache.org/jira/browse/GROOVY-11666?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18007828#comment-18007828
 ] 

Eric Milles commented on GROOVY-11666:
--------------------------------------

Thanks for checking.  In fact, looking at the documentation, this seems to be 
stated from the very start: "The source and destination directory will be 
recursively scanned for Java source files to compile. Only .java files that 
have no corresponding .class file or where the .class file is older than the 
.java file will be compiled."

https://ant.apache.org/manual/Tasks/javac.html

> 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
>    Affects Versions: 4.0.26
>            Reporter: Björn Kautler
>            Priority: Major
>
> 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)

Reply via email to