Ok … reporting some progress here.

I managed to get the build to create the java8 and the java7 artifacts in one 
run and to run the tests in both versions.
The only thing I am currently struggling with is the Maven toolchain support.

Maven provides a mechanism called “toolchains” in which you can for example 
define multiple JDKs and use this to do exactly what we want: run all tests in 
the normal modules with Java8 and the ones in the Java7 modules with Java7. 
Unfortunately, we would need the paths to the JDKs on Travis to use this. It 
would be easy on Apache Jenkins, but right now I think it would probably be 
better to let the tests on Travis all run with Java8 and to run the Java7 tests 
with Java7 on the ASF Jenkins.

What do you think?

Will continue porting all the individual modules … currently only ported the 
api modules . A lot more to go ;-)

Chris



Am 17.06.17, 16:29 schrieb "Christofer Dutz" <christofer.d...@c-ware.de>:

    Ok … so I think I might have a possible solution, thanks to Karl Heinz 
Marbaise on the Maven list.
    
    We don’t use profiles at all and build all artifacts in one run. The 
difference would be that we create mini modules in the “java7” directory which 
build the java7 versions of the java8 artifacs by copying and unpacking the 
java8 versions to the mini projects target directory, have retrolambda do it’s 
magic there and package them normally. In this case, I would like to use a 
different groupId for the java7 artifacts instead of using different versions 
as this way we will have far less trouble releasing stuff.
    
    Using maven toolchains I might even be able to run the transformed tests in 
the mini projects with java7 … haven’t used toolchains till now, but it looks 
as if they would deliver exactly the functionality we need.
    
    So I’m going to give this approach a try.
    
    Chris
    
    
    Am 16.06.17, 18:43 schrieb "Dale LaBossiere" <dml.apa...@gmail.com>:
    
        
        > On Jun 16, 2017, at 4:46 AM, Christofer Dutz 
<christofer.d...@c-ware.de> wrote:
        > 
        > In case of a variable for the groupId the warning is the same except 
that it mentions groupId instead of version :-(
        
        Hmm…  any thoughts on plausible alternatives? ...and implications to 
        dev, release, and consumption of java7&android Edgent?
        
        At a high level, something just seems wrong that it’s this hard to
        create multiple variants of a product w/mvn, where the variants’
        jars need different coordinates along some dimension.
        The retrolambda plugin may be complicating things but it doesn't
        feel like it’s the cause of the main issue: variable coordinate decls.
        
        Related, without the use of variable-version decls, even ignoring
        this j8/j7 thing, there would be <version>1.2.0-SNAPSHOT</version>
        throughout every one of our (~65) poms.  Even using
        variable-version decls, that static decl is present in every pom’s
        <parent> decl!  Is it the really case that when we want to release
        1.2.0 (not SNAPSHOT) or when it’s time for 1.3.0, every pom
        has to be edited?
        
        Just brainstorming…   my head hurts :-\   I apologize in advance…  :-)
        
        E<n> means Edgent-java<n> ...
        
        Is there any ~convenient way to synthesize/use alternate pom’s for E7?
        Might there be a way to leverage “mvn —file <pom>” and also 
pom.xml:<relativePath>?
        
        e.g., have the pom.xml implicitly be j8/E8 oriented with non-variable 
        coordinate decl for the project.
        
        Imagine building / staging a RC for E7 would be something like:
        
                mk-j7-poms  # create pom-j7.xml files adding “-java7” in 
versions and a “relativePath” of ../pom-j7.xml
                                     # **/pom-7.xml added to .gitignore; target 
dir is still variable
        
                mvn -f pom-j7.xml -Pjava7 clean install -DskipTests
                # TBD do j7 testing
                # …
                mvn -f pom-j7.xml -Pjava7 deploy -Papache-release -DskipTests
                
        Or if we’re going that far, then maybe needing/using a separate 
        clone/workspace to build & deploy E7 might be tolerable?
        
        Though… while the gradle/ant tooling created j7 jars using *the* j8 
jars, 
        this mvn tooling is already regenerating the j8 classes 
        and then running them through retrolambda, right? (if so, ugh)
        
        Kinda feels like E7 artifacts should instead just declare a
        dependency on their corresponding E8 jar artifact (not src)
        and just do some (retrolambda) transform to generate the E7 jar 
artifacts.
        Which seems to imply separate (~parallel) simpler poms for E7
        which can then also have non-variable-version decl?
        e.g., then something like
                cd java7
                mvn clean install -DskipTests
                # TBD test
                mvn deploy -Papache-release -DskipTests
        
        Also, the current "mvn install -Papache-release -Pjava7"
        generates -sources.jar, -javadoc.jar, -source-release.zip
        Do we really want to distribute those (duplicate) set of those 
artifacts?
        Don’t know if that might just mean more config tweaking or
        if the retrolambda plugin / “deploy” flow for java isn’t really what
        we want.
        
        Your thoughts on all of this?
        
        — Dale
        
        
    
    

Reply via email to