繁体   English   中英

如何在不引用绝对路径的情况下引用播放框架第三方模块?

[英]How do I reference play framework third party modules without referencing an absolute path?

这是我的情况。 我有一个使用guice模块的播放应用程序。 为了使用guice模块:

  • 我用play install guice安装它。 这将它安装在$PLAY_HOME/modules ,这对我来说很好。 我不想以任何方式编辑模块文件。
  • 然后我在我的dependencies.yml声明了这个模块: - play -> guice 1.2
  • 在我的应用程序中,我运行了play dependencies ,这可以很好地恢复模块并创建一个引用guice模块的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}魔法似乎不适用于那些生成的文件。

顺便说一句,我使用Play版本1.2.3!

您应该在dependencies.yml文件中尝试使用$ {application.path},就像在此示例中一样

require:
    - play -> crud
    - provided -> DateHelper 1.0 
repositories: 
    - provided: 
        type:       local 
        artifact:   "${application.path}/jar/[module]-[revision].jar" 
        contains: 
            - provided -> * 

看到这个问题: 如何在Play中将本地jar文件指定为依赖项! 框架1.x

这不是你的问题的答案,但我遇到了同样的问题。

  • 我不想调用resync对生产的依赖。
  • 我不想问我的团队成员,安装特殊模块。
  • 我不想提交包含模块位置的绝对路径的文件。

我找到的唯一解决方法:不要在Play中安装模块! 应用程序,只包括手动使用此模块的jar。 play-guice.jar应作为@opensas建议, aopalliancecom.google.inject包含在dependencies.yml中作为常规依赖项。

有趣的是,resync依赖项也删除.svn文件,所以在调用此命令之前备份它。

当您在生产中运行时,您将重新同步依赖项(通过play deps命令)与Play的本地安装,或者在某些情况下,您可以预编译所有内容,然后路径就不会出现问题。

例如,第二个场景是Heroku的场景。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM