You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Brent Hale <br...@eventronix.com> on 2004/12/06 18:56:14 UTC

Re: refresh source file set - Solution

Well here's how I got around it if it helps anyone else.  I also think 
this is a bug in how Maven behaves but you tell me.

In my situation I am generating 300+ database object classes from a 
prioritary DB schema to POJO (I put these in 
${basedir}/target/generated/src/java).  Of those, 80+ files have been 
modified since their creation and are under revision control.  I put 
those in my ${basedir}/src/java directory.  I wanted to auto-generate 
the files, copy the modified files over the top of the generated ones 
and compile.

I couldn't get Maven to do what I expected.

I had tried setting the <sourceDirectory> in project.xml to 
${basedir}/target/generated/src/java, but, after performing a "clean" 
the directory is not there.  And when starting the normal maven compile 
process it seems that Maven sets a flag saying "There are no source 
files to compile" and it never seems to check again before the compiling 
process even though there are now files in that directory.

So to get around it I did the following:

I kept the <sourceDirectory> in project.xml pointing at 
${basedir}/src/java so that Maven would think that there was source to 
compile.  After auto-generating the files I did the following to add the 
newly generated directory/files to the "maven.compile.src.set" property 
so that it would compile the newly created files AND the files that were 
copied over the top of each other.

           <ant:path
               id="generated.files.dir"
               location="${basedir}/target/generated/src/java"/>

           <maven:addPath
               id="maven.compile.src.set"
               refid="generated.files.dir"/>       

At this point there would be a problem since there would be duplicate 
file/package names under both directories.  So I created a preGoal and 
postGoal to java:compile to the compilation process which moves all of 
the original source code into a temporary directoy so that they won't 
get compiled and then moves them back after the compilation step is 
completed. 

   <preGoal
        name="java:compile">
       
        <echo message="Move the original set of source code out of the 
way."/>
        <move todir="${basedir}/src/java.org">
            <fileset dir="${basedir}/src/java"/>
        </move>
     </preGoal>

    <postGoal
        name="java:compile">

        <echo message="Move the original set of source code back."/>
        <move todir="${basedir}/src/java">
            <fileset dir="${basedir}/src/java.org"/>
        </move>
     </postGoal>

          
That seems to work. 

This seems like a bug in Maven.  I would assume that it should check for 
source code to compile during the java:compile phase or at least after a 
preGoal to java:compile.  Lots of things can happen along the way that 
might affect the source list.

Below is a response I received from the original poster of the problem.  
His comments also show the frustration of trying to do this.  I however, 
could not resort to a separate batch file.
---------------------------------------------

Here are two things that might work:
- keep the generated-source directory in place
    IIRC, it's not the missing files that troubles maven,
    but the missing directory.  But I'm not sure about this...

- Use a wrapper (that's what I did)
    First generate the source files, then call maven.  I'm using a
    "build.bat" that calls ant, which in turn generates the source
    files and calls maven.
    
    <target name="compile" description="compiles the source code"
            depends="generate-source">
      <antcall target="-maven">
        <param name="goal" value="java:compile"/>
      </antcall>
    </target>

It might be worth a try asking the maven developers for that refresh
feature, though.

Ron




Brent Hale wrote:

> Does anyone know of a solution for this problem?  This is quite an old 
> post but I'm having the same issue and am trying to figure out how to 
> handle this.
>
> Brent
>
>
> Ronald Blaschke wrote:
>
>> Hi,
>>
>> I'd like to automatically generate some java source files and thought
>> I could do it like this.
>>
>> - Specify a "generated" source directory, eg target/generated-java in
>> project.xml
>> - In maven.xml:
>>  <preGoal name="java:compile">
>>    <attainGoal name="generate-source"/>
>>  </preGoal>
>>
>> whereas "generate-source" does
>> - Copy plain java files from src/java to target/generated-java
>> - Generate source files as needed into target/generated-java
>>
>> Unfortunately maven complains with
>>    [echo] No java source files to compile.
>>
>> My question: How do I "refresh" the source file set maven uses?
>>  <preGoal name="java:compile">
>>    <attainGoal name="generate-source"/>
>>    <attainGoal name="refresh-source-file-set"/> <!-- but how? -->
>>  </preGoal>
>>  
>> Regards,
>> Ronald
>>  
>>
>

-- 
Brent Hale
Fishbowl Inventory
www.fishbowlinventory.com


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: refresh source file set - Solution

Posted by Brent Hale <br...@eventronix.com>.
FWIW...I also (just barely) found and interesting thread from 1/8/2004 
entitled "Mutliple source directories in project.xml".  It talks about 
the possibility of a <generatedSourceDirectory> element to the POM.  I 
don't see that it ever made it in, but perhaps someone else knows better.

Thanks,
Brent


Brent Hale wrote:

> Well here's how I got around it if it helps anyone else.  I also think 
> this is a bug in how Maven behaves but you tell me.
>
> In my situation I am generating 300+ database object classes from a 
> prioritary DB schema to POJO (I put these in 
> ${basedir}/target/generated/src/java).  Of those, 80+ files have been 
> modified since their creation and are under revision control.  I put 
> those in my ${basedir}/src/java directory.  I wanted to auto-generate 
> the files, copy the modified files over the top of the generated ones 
> and compile.
>
> I couldn't get Maven to do what I expected.
>
> I had tried setting the <sourceDirectory> in project.xml to 
> ${basedir}/target/generated/src/java, but, after performing a "clean" 
> the directory is not there.  And when starting the normal maven 
> compile process it seems that Maven sets a flag saying "There are no 
> source files to compile" and it never seems to check again before the 
> compiling process even though there are now files in that directory.
>
> So to get around it I did the following:
>
> I kept the <sourceDirectory> in project.xml pointing at 
> ${basedir}/src/java so that Maven would think that there was source to 
> compile.  After auto-generating the files I did the following to add 
> the newly generated directory/files to the "maven.compile.src.set" 
> property so that it would compile the newly created files AND the 
> files that were copied over the top of each other.
>
>           <ant:path
>               id="generated.files.dir"
>               location="${basedir}/target/generated/src/java"/>
>
>           <maven:addPath
>               id="maven.compile.src.set"
>               refid="generated.files.dir"/>      
> At this point there would be a problem since there would be duplicate 
> file/package names under both directories.  So I created a preGoal and 
> postGoal to java:compile to the compilation process which moves all of 
> the original source code into a temporary directoy so that they won't 
> get compiled and then moves them back after the compilation step is 
> completed.
>   <preGoal
>        name="java:compile">
>              <echo message="Move the original set of source code out 
> of the way."/>
>        <move todir="${basedir}/src/java.org">
>            <fileset dir="${basedir}/src/java"/>
>        </move>
>     </preGoal>
>
>    <postGoal
>        name="java:compile">
>
>        <echo message="Move the original set of source code back."/>
>        <move todir="${basedir}/src/java">
>            <fileset dir="${basedir}/src/java.org"/>
>        </move>
>     </postGoal>
>
>          That seems to work.
> This seems like a bug in Maven.  I would assume that it should check 
> for source code to compile during the java:compile phase or at least 
> after a preGoal to java:compile.  Lots of things can happen along the 
> way that might affect the source list.
>
> Below is a response I received from the original poster of the 
> problem.  His comments also show the frustration of trying to do 
> this.  I however, could not resort to a separate batch file.
> ---------------------------------------------
>
> Here are two things that might work:
> - keep the generated-source directory in place
>    IIRC, it's not the missing files that troubles maven,
>    but the missing directory.  But I'm not sure about this...
>
> - Use a wrapper (that's what I did)
>    First generate the source files, then call maven.  I'm using a
>    "build.bat" that calls ant, which in turn generates the source
>    files and calls maven.
>       <target name="compile" description="compiles the source code"
>            depends="generate-source">
>      <antcall target="-maven">
>        <param name="goal" value="java:compile"/>
>      </antcall>
>    </target>
>
> It might be worth a try asking the maven developers for that refresh
> feature, though.
>
> Ron
>
>
>
>
> Brent Hale wrote:
>
>> Does anyone know of a solution for this problem?  This is quite an 
>> old post but I'm having the same issue and am trying to figure out 
>> how to handle this.
>>
>> Brent
>>
>>
>> Ronald Blaschke wrote:
>>
>>> Hi,
>>>
>>> I'd like to automatically generate some java source files and thought
>>> I could do it like this.
>>>
>>> - Specify a "generated" source directory, eg target/generated-java in
>>> project.xml
>>> - In maven.xml:
>>>  <preGoal name="java:compile">
>>>    <attainGoal name="generate-source"/>
>>>  </preGoal>
>>>
>>> whereas "generate-source" does
>>> - Copy plain java files from src/java to target/generated-java
>>> - Generate source files as needed into target/generated-java
>>>
>>> Unfortunately maven complains with
>>>    [echo] No java source files to compile.
>>>
>>> My question: How do I "refresh" the source file set maven uses?
>>>  <preGoal name="java:compile">
>>>    <attainGoal name="generate-source"/>
>>>    <attainGoal name="refresh-source-file-set"/> <!-- but how? -->
>>>  </preGoal>
>>>  
>>> Regards,
>>> Ronald
>>>  
>>>
>>
>

-- 
Brent Hale
Fishbowl Inventory
www.fishbowlinventory.com


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org