#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)
#1. reproduce steps
1.1 create a test message catkin package
mkdir -p ~/test/src/my_msgs/msg1.2 build test package using catkin_make_isolated
cd ~/test && catkin_make_isolated1.3 check generated java source for message
$ ls build_isolated/my_msgs/java/my_msgs/src/main/java/my_msgsls: 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.gradleargs = 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_msgsTest.java#3. how to fix
Here is the change I made on genjava/src/genjava/gradle_project.py (just for your reference).