Я настоятельно рекомендую Classycle . Он отлично работает в моем смешанном проекте Scala / Java. Он работает на уровне байт-кода, и у меня никогда не было проблем, связанных с Scala.
В небольшом проекте вы можете просто написать свой конфигурационный файл вручную. Наш проект большой, поэтому я написал скрипт Scala, который генерирует файл конфигурации. Раздел файла, сгенерированного каждым пакетом, выглядит так:
[agent] = org.nlogo.agent.* excluding org.nlogo.agent.*.*
[agent+] = [agent] [api+]
[agent-] = org.nlogo.* excluding [agent+]
check [agent] independentOf [agent-]
Это говорит о том, что org.nlogo.agent может зависеть от org.nlogo.api (и рекурсивно от разрешенных зависимостей org.nlogo.api), но не от другого пакета.
Вы также можете написать правила, которые проверяют внешние зависимости, например, вот как я проверяю, что мы зависим только от JOGL от определенных пакетов:
[JOGL-free-zone] = org.nlogo.* excluding [gl.render] [gl.view]
[JOGL] = net.java.games.* javax.media.opengl.*
check [JOGL-free-zone] independentOf [JOGL]