Module 如何引用play framework第三方模块而不引用绝对路径?
这是我的情况。我有一个播放应用程序,它使用。要使用GUI模块,请执行以下操作:Module 如何引用play framework第三方模块而不引用绝对路径?,module,dependencies,playframework,Module,Dependencies,Playframework,这是我的情况。我有一个播放应用程序,它使用。要使用GUI模块,请执行以下操作: 我使用play install guice安装了它。这会将其安装在$PLAY\u HOME/modules中,这对我来说很好。我不想以任何方式编辑模块文件 然后我在我的dependencies.yml中声明了这个模块,就像这样:-play->guice1.2 在我的应用程序中,我运行了playdependencies,这可以很好地解析模块,并创建一个引用guice模块的modules/guice-1.2文件 问题
- 我使用
安装了它。这会将其安装在play install guice
中,这对我来说很好。我不想以任何方式编辑模块文件$PLAY\u HOME/modules
- 然后我在我的
中声明了这个模块,就像这样:dependencies.yml
-play->guice1.2
- 在我的应用程序中,我运行了
,这可以很好地解析模块,并创建一个引用guice模块的playdependencies
文件modules/guice-1.2
/some-absolute path/play-1.2.x/modules/guice-1.2
在当地为发展而工作时,这很好。但是当我想移动到生产服务器时,使用不同的Play安装!(即,使用不同的绝对路径)它显然会失败
那么,处理这个问题的最佳方法是什么
现在,我在application.conf
文件中声明模块,如下所示:module.guice=${play.path}/modules/guice-1.2
。
不幸的是,${play.path}
magic似乎无法处理这些生成的文件
顺便说一下,我使用的是Play的1.2.3版 在生产环境中运行时,您可以(通过play deps命令)将依赖项与本地play安装重新同步,或者在某些情况下,您可以预编译所有内容,这样路径就不会出现问题
例如,第二种情况是使用Heroku的情况。您应该在dependencies.yml文件中使用${application.path},如本例所示
require:
- play -> crud
- provided -> DateHelper 1.0
repositories:
- provided:
type: local
artifact: "${application.path}/jar/[module]-[revision].jar"
contains:
- provided -> *
看这个问题:这不是你问题的答案,但我也面临同样的问题
- 我不想把resync称为对生产的依赖
- 我不想要求我的团队成员安装特殊模块
- 我不想提交包含模块位置的绝对路径的文件
play guice.jar
应作为@opensas建议的内容,包括aopalliance
和com.google.inject
作为dependencies.yml中的常规依赖项
有趣的是,resync dependencies也在删除
.svn
文件,所以在调用此命令之前备份它。这听起来不太理想。看起来一切都在进行中!文件提交后,用户无需更改任何内容,只需在生产中使用pay start
。在生产环境中重新运行play dependencies
,似乎会适得其反,尤其是在这种情况下,它会更改源代码(即模块/guice-1.2
)文件。我不完全确定您所说的“预编译一切”场景是什么意思。如果我将application.mode
设置为prod
则播放!他会玩Percopile。但这并没有改变我的问题…@SaM好吧,在绝对路径上,避免它的唯一方法是在dev和prod中使用相同的路径,如果您必须重新运行deps命令来避免问题的话。关于预编译,我只是提到了它,因为在尝试heroku时,我看到它可以做到这一点(可能是将代码打包到war?现在无法检查),并且我对依赖项没有任何问题。这可能就是答案。这并不是我想要达到的目标。我安装的模块安装在PLAY_HOME/modules
中,我打算从那里使用,因为PLAY就是在这里安装它的。dependencies.yml文件还创建了一个对它的本地引用,并且不复制它,因此它让我感到欣慰,因为它不应该被复制。我只希望该引用不是绝对路径,而是PLAY\u HOME/modules
目录中模块的相对(或参数化)路径。这有意义吗?