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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to