Hi Chris,

I’ve been playing with what’s needed / desired for creating an Edgent app in 
the new world.
I wanted to get this out to you ~asap as I’m on vacation next week.

This included identifying what would constitute good pom template info.
I haven’t looked into what it takes to create a new “Edgent quickstart” 
archetype
but you had mentioned creating one in the past so maybe you could help with 
that?  :-)

I wanted to support:
    - always write the Edgent app in java8 to be able to use lambdas
    - pom is ~independent of other Edgent runtime noms - parent isn’t 
edgent-parent/pom or any of the other edgent noms
    - create a über jar for either of the 3 platforms
    - create a new standalone “application package” for either of the 3 
platforms
      An app-pkg.tar contains the non-uber app jar, all of the app’s 
dependencies, and a app-run.sh.
      A new package-app.sh constructs the app-pkg.tar:  see 
https://paste.apache.org/HyGO
    - the same built non-uber jar can also be used with the get-edgent-jars.sh 
tooling,
      should that be what the user/deployment needs.
      This flow is still a bit rough with respect to composing the classpath.
      More on this one later.

I’ve tested the above using a HelloEdgent app and IotpQuickstart app.
I’ve haven't completed trying with a Kafka Producer sample (close to 
SimplePublisherApp.java)
but it already demonstrates that the kafka connector pom isn’t sufficiently 
“non-transitive” in its dep decls.

This work should also flow into the Edgent samples I think.
e.g., we release a edgent-samples-source bundle whose pom(s) are similar to the 
ones
used here / supporting the same scenarios. The samples bundle would also contain
the package-app.sh and get-edgent-jars.sh tools I think.
Again, we would not release pre-built samples bundle/artifacts.

Here’s the workflow…

CLI - create, build, run/package new Edgent app 

Create - eventually using Edgent archetype
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app 
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    add things noted below to pom (dependencies, properties, runnable jar, uber 
jar)

    copy “hello edgent” into App.java and tweak package&classname

Build:  
        mvn clean package -DskipTests    # add -Pplatform-java7 or 
-Pplatform-android as needed
        yields:
                target/my-app-1.0-SNAPSHOT-uber.jar
                target/my-app-1.0-SNAPSHOT.jar

Run
    - via über jar that was created
        java -jar target/my-app-1.0-SNAPSHOT-uber.jar

    - via standalone “application package”

        # create standalone target/app-pkg.tar    
        package-app.sh   # add  --platform java7 or --platform android as 
appropriate
        …
        ##### copy target/app-pkg.tar to the destination system
        ##### to run the app:
        #####     mkdir app-pkg
        #####     tar xf app-pkg.tar -C app-pkg
        #####     (cd app-pkg; ./app-run.sh)

        mkdir SWILL
        cp target/app-pkg.tar SWILL
        cd SWILL
        mkdir app-pkg
        tar xf app-pkg.tar -C app-pkg
        # switch to j7 to test if appropriate
        #     sh
        #     export JAVA_HOME=`/usr/libexec/java_home -v 1.7`   # on OSX
        #     export PATH=$JAVA_HOME/bin:$PATH
        #     which java
        (cd app-pkg; ./app-run.sh)
Hello
Edgent!
Jul 18, 2017 6:23:51 PM org.apache.edgent.runtime.etiao.Executable$1 accept
INFO: No more active user tasks

=================================

Here’s what I came up with for additions to the quickstart archetype generated 
pom.
Maybe you’ll see ways to improve upon it.

Link to just the pom fragment:    https://paste.apache.org/9Dtm
Link to a full pom for the IotpQuickstart app case:  
https://paste.apache.org/eqaj

— Dale


Reply via email to