commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luc Maisonobe <...@spaceroots.org>
Subject Re: [Math] Compile only top-level package and below
Date Fri, 04 Sep 2015 16:19:42 GMT
Hi Gilles,

Le 04/09/2015 17:30, Gilles a écrit :
> On Fri, 4 Sep 2015 16:26:16 +0100, sebb wrote:
>> On 4 September 2015 at 15:42, Gilles <gilles@harfang.homelinux.org>
>> wrote:
>>> Hi.
>>>
>>>
>>> On Fri, 4 Sep 2015 15:30:57 +0100, sebb wrote:
>>>>
>>>> On 4 September 2015 at 14:08, Gilles <gilles@harfang.homelinux.org>
>>>> wrote:
>>>>>
>>>>> Hello.
>>>>>
>>>>> There are two branches for Commons Math.
>>>>>
>>>>> For one, the top-level Java package is
>>>>>   org.apache.commons.math4
>>>>> For the other, it is
>>>>>   org.apache.commons.math3
>>>>>
>>>>> Unless I'm mistaken, this should imply that maven tries to compile
>>>>> only files under either
>>>>>   src/main/java/org/apache/commons/math4
>>>>>   src/test/java/org/apache/commons/math4
>>>>> or
>>>>>   src/main/java/org/apache/commons/math3
>>>>>   src/test/java/org/apache/commons/math3
>>>>
>>>>
>>>> No, Maven compiles everything under src/[main|test]/java by default.
>>>>
>>>> You could change that to
>>>>
>>>> src/main/java/org/apache/commons/math4
>>>>
>>>> but then the compiler would complain about mismatched package names
>>>>
>>>>> But it happens that I have currently files in "math3" not currently
>>>>> checked in into git: those are new files which git does not remove
>>>>> when switching branches.
>>>>
>>>>
>>>> That's the problem - spurious files in the workspace.
>>>>
>>>>> Then when starting a compilation in "master" (where the top-level
>>>>> is "math4"), lots of compilation errors occur.
>>>>>
>>>>> The "source" top-level directories do not seem to be specified
>>>>> in the project's POM.
>>>>
>>>>
>>>> No, because Maven defaults to the standard directory layout.
>>>>
>>>>> Can the parent be changed in order to produce the desired behaviour?
>>>>
>>>>
>>>> Well, you might be able to exclude all files under math3/math4 but it
>>>> will be tricky to do and non-standard.
>>>
>>>
>>> But it is standard: source files must belong to the "top-level" package
>>> of the project.
>>
>> No, that's not always the case.
>> Some components have examples etc that are in a different package
>> entirely.
>>
>>> We don't change the top of the package hierarchy, just filter out the
>>> files that do not belong to the project (as per the policy).
>>
>> What policy?
> 
> Do you that it's OK to have an Apache project publish files that are not
> under the project's top-level package?

No, hence there should not be source files that do not belong to the
top level package in the source folder.

The fact is maven is used in many different situations, not only in
Apache Commons. In order to streamline everything, the maven project
has decided to stick with "conventions over configuration", which
means one should really obey the conventions. This explains why it
is so difficult to do otherwise. If you attempt to not follow the
maven imposed conventions, you are going to suffer a lot fighting
agains maven ... and at the end maven wins as you throw in the towel.

So the convention imposed by maven is really to compile everything
under src/main/language-name and src/test/language-name. It does not
care about the top-level package and I don't even think it has a
notion of top-level package (though many plugins may be aware of
packages names).

What I don't get is why you need these files to be precisely at
this place while not compiling them. If you don't want to compile
them and typically use them only as reference couldn't these files
be only a few folders away? Then, you could have two development
trees, one for math3 and one for math4, always available together
but not mixed in a single folder. As even the pom file is above
src/, with separate folders you could even have both pom files
available if you need to do some comparisons or parallel compilations
and tests runs.

best regards,
Luc

> 
>> Note that although the the Maven coordinates must change when
>> top-level package names change there is no requirement for them to use
>> the same naming convention.
>> In fact they don't - the group id is commons-math3, not math3
>>
>>>>
>>>>> Or is there a workaround?
>>>>
>>>>
>>>> Remove the spurious files ...
>>>
>>>
>>> They are not "spurious".
>>> They just happen to end with ".java".
>>
>> Yes, they are spurious because they don't belong in the workspace.
>>
>> It's not just java files that may cause problems.
>> Unless the build workspace is "clean", various issues may occur.
> 
> I just want that maven does not to compile things under a "math3"
> when the project is "math4" (and vice-versa).
> 
> That seems pretty reasonable.
> 
> Gilles
> 
> 
>>>>> Is there a better way to handle the situation (short of manually
>>>>> moving the source files back and forth)?
>>>>
>>>>
>>>> Why not use two checkouts and switch between them instead of switching
>>>> the contents of a single checkout?
>>>
>>>
>>> I might have to resort to that.
>>> But it does not look nice (IOW why having branches if not to switch
>>> between
>>> them?).
>>>
>>>
>>> Thanks,
>>> Gilles
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message