I have a build with several projects specified as dependencies that are relative on the filesystem. The dependency tree is something like
core <- utils <- my project
The “core” project has a dependency on log4j, so I specified it accordingly in the build.gradle of “core”. While building “my project” I noticed that I was getting many errors claiming that methods from log4j can’t be found.
error: cannot find symbol
if (logger.isTraceEnabled()) {
^
symbol:
method isTraceEnabled()
location: variable logger of type Logger
I thought this was strange so I checked my dependencies using “gradle dependencies” which showed the following:
compile - Compile classpath for source set 'main'.
+--- project :utils
|
+--- project :core
|
|
+--- log4j:log4j:1.2.17
|
|
... A great many other dependencies
|
\--- org.apache.commons:commons-math:2.1
+--- project :core (*)
... other deps
\--- net.sf.opencsv:opencsv:2.3
So it appears that log4j is in the compile classpath, but is somehow not being picked up in the subproject “my project”. If I add log4j to the dependency list for “my project” explicity then everything works. My initial thinking was that I should define my dependency on the project using the transitive flag, but I wasn’t able to get that working correctly. Does anyone have any suggestions on how to get “my project” to recognize the dependency durther down the hierarchy?