Comments (6)
ros/message_generation#1 (comment)
from rosjava_bootstrap.
There are alot of ways we could do this, however it's important to note that rosjava has quite a few workflows that would be interesting to supoport. This constrains what is possible.
Standard Style
Create a genjava package that hooks into message_generation and genmsg to automatically build
artifacts along with cpp/python/lisp.
- Compared with genpy, gencpp, java requires a compile step, this will slow things down
- It's not significant except when there is no gradle daemon being utilised.
Source Jars
Evolving the former method - instead of compiling the created .java files, just pack them into
a jar for later consumption by java packages. Lots of unanswered questions:
- Can we legitimately store these in an external maven repo?
- How do other gradle projects 'depend' on these jars
- How do other gradle projects 'compile' these jars
- Even if we can, there is multiplicity if every package that depends on a msg source jar has to separately compile them
On the Fly
Use the cmake to spin up an artifact for whatever version it finds on the ROS_PACKAGE_PATH.
- Defer to always spinning an artifact over getting from the external repo, even if the same version
- With the time taken to check the repo, you may as well spin it locally
- Remember also that often people have changes in the local version and only usually update the version before release.
- Scan package.xml for msg dependencies - this way you can automatically spin with no effort from the programmer
Q) The above makes sure msg artifacts are around for a source workspace, but...
who makes sure the msg artifacts are around for installed workspaces?
For example, rosjava_foo is a mixed java/python catkin package that needs std_msgs. If you install it's deb, you ultimately have no org.ros.rosjava_messages.std_msgs artifact on the system still. If you run something, it will be missing that artifact and probably(?) fail.
What if...(and this, i.e. post-install scripts might be damn complicated to make work in the ros world)
- The debs don't actually install the artifacts, instead they have a postscript which does a maven install
- This would make sure any dependent artifacts are installed at the same time
Then source workspaces are guaranteed to spin them up on the fly and installed workspaces are guaranteed to have the dependency chains all satisfied and ready to run.
from rosjava_bootstrap.
I actually have an installation of the former (genjava) running here for testing. Seems to work quite well with little lag so long as the gradle demon is used. Note that you have to include any and all msg packages in the rosjava workspace. I'm working on a script to autogenerate from an installed ROS_PACKAGE_PATH to make things a little more convenient, but this is ultimately what genjava should do.
from rosjava_bootstrap.
Another topic to bring into this here is the idea of automatically updating the maven repo from a job on OSRF's build farm...
from rosjava_bootstrap.
Am convinced that genjava is the right way to go.
- Catkin feeds you exactly which messages are to be built and which are just lying around
- Catkin also feeds you exactly the transitive dependencies each message needs
- Rebuilds will occur on the fly whenever a single message is changed.
Any solution outside of this will either end up reinventing alot of this or doing alot of redundant processing/rebuilding outside of the loop.
from rosjava_bootstrap.
The current genjava implementation uses message_generation's bulk generator - i.e. it builds messages at the package level (i.e. all messages for a package at once). Need to implement a function that does this file by file as it fits better with genxxx's workflows and also enables us to pick up transitive dependencies. Currently we can't pick up the transitives because our processing occurs at the module (i.e. package) level and the transitives are only passed at the file level.
from rosjava_bootstrap.
Related Issues (20)
- Message Headers missing dependency information HOT 12
- Updates to rosjava message generation HOT 2
- Android studio 0.6 upgrades HOT 1
- Bad version checking in the catkin plugin
- After publishing my Android app on Google Play I've got "Supported devices 0" warning HOT 12
- Revise maven repository dependencies HOT 11
- Pull in non-api settings via url instead of plugin HOT 2
- FYI: gradle 2.3 released HOT 3
- No default maven repository set in the plugin HOT 4
- update gradle version from the internet. HOT 12
- hydro message dependencies muddled with indigo
- add to RosAndroid.groovy maven repositories HOT 1
- custom messages with fixed-length arrays are received in rosjava as an empty array HOT 1
- Make buildscript pointer release agnostic
- Build is failing on debian Jessie due to SSL issues HOT 15
- generate java code for actions in same source workspace HOT 8
- install tags are wrong HOT 2
- Could not find method google() for arguments [] on repository container HOT 2
- Outdated buildToolsVersion in ros-android gradle plugin HOT 5
- https://github.com/rosjava/rosjava_mvn_repo/raw/master the page is gone
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rosjava_bootstrap.