Module 如何引用play framework第三方模块而不引用绝对路径?

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文件 问题

这是我的情况。我有一个播放应用程序,它使用。要使用GUI模块,请执行以下操作:

  • 我使用
    play install guice
    安装了它。这会将其安装在
    $PLAY\u HOME/modules
    中,这对我来说很好。我不想以任何方式编辑模块文件
  • 然后我在我的
    dependencies.yml
    中声明了这个模块,就像这样:
    -play->guice1.2
  • 在我的应用程序中,我运行了
    playdependencies
    ,这可以很好地解析模块,并创建一个引用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}
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称为对生产的依赖
  • 我不想要求我的团队成员安装特殊模块
  • 我不想提交包含模块位置的绝对路径的文件
我发现的唯一解决办法是:不要在游戏中安装模块!应用程序,只包括手动使用此模块的JAR
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
目录中模块的相对(或参数化)路径。这有意义吗?