Как мне расширить classpath, используемый для 'grails run-app' - PullRequest
13 голосов
/ 05 марта 2011

В моем файле Config.groovy есть следующее:

grails.config.locations = [ "classpath:env.groovy" ]

Теперь, где именно я должен разместить "env.groovy" так, чтобы он был доступен на CLASSPATH во время запуска приложения grails? Документация здесь крайне отсутствует.

Я могу заставить его работать на чистой командной строке, поместив "env.groovy" в $ APP_HOME / etc и запустив:

$ grails -classpath ./etc run-app

Это кажется немного хакерским, но я могу с этим смириться ... Однако я не могу заставить работать такую ​​конфигурацию при запуске run-app с использованием плагина Grails eclipse (STS):

Unable to load specified config location classpath:env.groovy : class path resource [env.groovy] cannot be opened because it does not exist

Я видел похожие посты здесь , здесь , здесь и здесь но ответы не были выполнены.

Я ищу решение на основе CLASSPATH, которое будет работать с «run-app» в режиме разработки (как из командной строки, так и из eclipse). Я знаю, как настроить CLASSPATH для моего контейнера сервлета развертывания, так что это не проблема.

Ответы [ 4 ]

6 голосов
/ 08 марта 2011

Эрик, способ, которым мы сделали это, указав системное свойство Java с расположением файла конфигурации, а затем мы берем это в Config.groovy, что-то вроде этого:

if (System.properties["application.config.location"]) {
  grails.config.locations = [
          "file:" + System.properties["application.config.location"] + "${appName}-config.groovy"
  ]
}

КакВы можете видеть, что мы устанавливаем только папку, в которой файл находится внутри системного свойства Java, и условно мы говорим, что именем файла должно быть имя приложения + "-config.groovy", но если вам нужно, вы можете указатьвесь путь, включая имя файла внутри системного свойства.

Затем при запуске приложения вы просто устанавливаете переменную следующим образом:

grails -Dapplication.config.location=/Users/eric/ run-app

Как видно из кода, есть ifзаявление, которое запрещает вам искать файл конфигурации, если системная переменная свойства Java не была определена, таким образом вы можете запустить свое приложение, не используя внешний файл конфигурации и просто используя параметры конфигурации, определенные в Config.groovy.

Если вы запускаете свое приложение в Eclipse или IntelliJ, вы передаете эту переменную как переменную JVM.

Эта опция отличается от необходимости изменять путь к классу или включать файл конфигурации в путь к классам, чтобы приложение его подбирало.

3 голосов
/ 20 февраля 2012

Мы можем добавить событие посткомпиляции в _Events.groovy, чтобы скопировать наш внешний файл конфигурации в classpath следующим образом:

eventCompileEnd = {
ant.copy(todir:classesDirPath) {
  fileset(file:"${basedir}/grails-app/conf/override.properties")
}}

Более подробную информацию можно найти здесь

0 голосов
/ 30 августа 2015

папки в classpath перечислены в файле .classpath по умолчанию в grails 2.5.0:

<classpathentry kind="src" path="src/java"/>
<classpathentry kind="src" path="src/groovy"/>
<classpathentry excluding="spring/" kind="src" path="grails-app/conf"/>
<classpathentry kind="src" path="grails-app/conf/spring"/>
<classpathentry kind="src" path="grails-app/controllers"/>
<classpathentry kind="src" path="grails-app/domain"/>
<classpathentry kind="src" path="grails-app/i18n"/>
<classpathentry kind="src" path="grails-app/services"/>
<classpathentry kind="src" path="grails-app/taglib"/>
<classpathentry kind="src" path="grails-app/utils"/>
<classpathentry kind="src" path="grails-app/views"/>
<classpathentry kind="src" path="test/integration"/>
<classpathentry kind="src" path="test/unit"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.grails.ide.eclipse.core.CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/eclipseclasses"/>

файлы в grails-app conf будут скопированы в WEB-INF / classes и будутчасть пути к классам

0 голосов
/ 05 марта 2011

Должен быть файл с именем .classpath в проекте home.
Я не уверен, но взгляните на этот файл.

...