rosjava / genjava

RosJava message definition and serialization artifact generators.
5 stars 32 forks source link

catkin_make_isolated failed to generate java source for message file #6

Closed xiongdu closed 7 years ago

xiongdu commented 8 years ago

1. reproduce steps

1.1 create a test message catkin package mkdir -p ~/test/src/my_msgs/msg

echo "
<?xml version="1.0"?>
<package>
  <name>my_msgs</name>
  <version>0.0.1</version>
  <description>
  This package is just for message test.
  </description>
  <maintainer email="test@test.com">Test</maintainer>
  <license>BSD</license>
  <url type="website">http://ros.org/wiki/test</url>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>geometry_msgs</build_depend>
  <build_depend>std_msgs</build_depend>
  <run_depend>message_runtime</run_depend>
  <run_depend>geometry_msgs</run_depend>
  <run_depend>std_msgs</run_depend>
</package>
" >  ~/test/src/my_msgs/package.xml
echo "
cmake_minimum_required(VERSION 2.8.3)
project(my_msgs)

set(MSG_DEPS
    std_msgs
    geometry_msgs
    )

find_package(catkin REQUIRED COMPONENTS
  message_generation
  ${MSG_DEPS}
)

set(MSG_FILES Test.msg)
add_message_files(DIRECTORY msg FILES ${MSG_FILES})
generate_messages(DEPENDENCIES ${MSG_DEPS})

catkin_package(CATKIN_DEPENDS message_runtime ${MSG_DEPS})
" > ~/test/src/my_msgs/CMakeLists.txt
echo "
Header header
uint32 id
uint32 confidence
geometry_msgs/PoseStamped pose
" > ~/test/src/my_msgs/msg/Test.msg

1.2 build test package using catkin_make_isolated cd ~/test && catkin_make_isolated

1.3 check generated java source for message $ ls build_isolated/my_msgs/java/my_msgs/src/main/java/my_msgs ls: cannot access build_isolated/my_msgs/java/my_msgs/src/main/java/my_msgs: No such file or directory

2. the cause

By comparing to the build.gradle generated by catkin_make, I find that there is trailing "/." in "--package-path" path: $ grep package-path build_isolated/my_msgs/java/my_msgs/build.gradle args = new ArrayList<String>([generated_sources_directory, '--package-path=/home/xxx/test/src/my_msgs/.', 'my_msgs'])

After removing the trailing "/." in "--package-path" path in build.gradle, it could successfully generate the java source: $ ls build_isolated/my_msgs/java/my_msgs/src/main/java/my_msgs Test.java

3. how to fix

Here is the change I made on genjava/src/genjava/gradle_project.py (just for your reference).

diff --git a/src/genjava/gradle_project.py b/src/genjava/gradle_project.py
index 39d5957..3d1df38 100644
--- a/src/genjava/gradle_project.py
+++ b/src/genjava/gradle_project.py
@@ -155,6 +155,7 @@ def create(msg_pkg_name, output_dir):

     create_gradle_wrapper(genjava_gradle_dir)
     pkg_directory = os.path.dirname(msg_package_index[msg_pkg_name].filename)
+    pkg_directory = os.path.abspath(pkg_directory)
     msg_pkg_version = msg_package_index[msg_pkg_name].version
     populate_project(msg_pkg_name, msg_pkg_version, pkg_directory, genjava_gradle_dir, msg_dependencies)
stonier commented 7 years ago

This is coming from the filename generated by the package object created with catkin_pkg.packages.find_package, e.g.

when you call:

path = /mnt/mervin/workspaces/dude/src/py_trees_msgs
unused_package_path, package in find_packages(path).items()
print("%s" % package.filename)

you get

/mnt/mervin/workspaces/dude/src/py_trees_msgs/./package.xml

Ideally should have catkin_pkg fix this, but adding the abspath here will make it more robust anyway.

stonier commented 7 years ago

@adamantivm I've bugfixed, version bumped (0.3.2) and tagged this. Could you re-release it for kinetic? Thanks!

adamantivm commented 7 years ago

sure think, thanks for the fix @stonier ! To make things a bit easier to track for me, may I ask next time:

stonier commented 7 years ago

Aye, apologies....definitely a PR.

I was actually going to push this release for you, but got to the blooming stage and discovered you must be using a different release repo somewhere. Anyway, thanks for following up :)

adamantivm commented 7 years ago

I don't mind taking care of this. Something is odd with bloom today, I wasn't particularly trying to use a different release repo or anything, but I'll figure it out. I'll report when it's out.

adamantivm commented 7 years ago

Ok, I had to manually send the PR for bloom, let's hope it's all OK.