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