TL; DR
If you don't know the asset path in Play Framework
sbt "show playAllAssets"
Is super convenient
sizer@sizle:~/hello-play-assets (master *+>)
$ sbt "show playAllAssets"
[info] Loading global plugins from /Users/sizer/.sbt/1.0/plugins
[info] Loading settings for project hello-play-assets-build from plugins.sbt ...
[info] Loading project definition from /Users/sizer/hello-play-assets/project
[info] Loading settings for project root from build.sbt ...
[info] Loading settings for project child from build.sbt ...
[info] Set current project to hello-play-assets (in build file:/Users/sizer/hello-play-assets/)
[info] child / playAllAssets
[info] List((public/,/Users/sizer/hello-play-assets/child/target/web/public/main))
[info] playAllAssets
[info] List((public/,/Users/sizer/hello-play-assets/target/web/public/main))
[success] Total time: 0 s, completed 2019/05/20 19:36:09
###
#You can see a list of asset paths. target/web/public/It seems to be in main.
###
$ tree target/web/public/main/
target/web/public/main/
├── images
│ └── favicon.png
├── javascripts
│ └── main.js
├── lib
│ └── child
│ ├── images
│ │ ├── favicon.png
│ │ └── image_in_child.jpg
│ ├── javascripts
│ │ └── main.js
│ └── stylesheets
│ └── main.css
└── stylesheets
└── main.css
8 directories, 7 files
###
# lib/{moduleName}/It seems that you can get it if you specify it in images
###
I am developing a web application with Play Framework (Java). The common parts are cut out into child modules. I want to call an asset in a child module. → I can't find it ...
├── build.sbt
├── child #=>This is the common part
│ ├── build.sbt
│ ├── app
│ ├── conf
│ └── public #=>Put the image here
├── conf
│ ├── application.conf
│ ├── logback.xml
│ └── routes
├── project
│ ├── build.properties
│ ├── plugins.sbt
└── public
├── images
├── javascripts
└── stylesheets
`
When you package your application, all assets for the application, including all sub projects, are aggregated into a single jar How are public assets packaged? - playframework.com
It will make a jar file including subprojects. Yeah
Put it in the public folder and access it with ʻAssets.at (file: String) or ʻAssets.versioned (path =" / public ", file: Asset)
.
→ I'm addicted to not being able to access
I found an ISSUE that can't read the assets of the child module!
Did you add the sbt web plugin or the play plugin (which transitively adds the sbt web plugin) to the subproject? Assets are now no longer considered classpath resources ... If you add the play plugin, you can put assets in the assets directory or the public directory. If you add the sbt web plugin, then you'll have to add the assets to the default directories for sbt-web, src/main/assets or src/main/public. https://github.com/playframework/playframework/issues/2944#issuecomment-44243541
Did you add the sbt-web plugin or the play plugin to the child module? Otherwise assets will not enter the classpath
(Write that in the documentation ...)
If you add the play plugin, you can put assets in the assets directory or the public directory. If you add the sbt web plugin, then you'll have to add the assets to the default directories for sbt-web, src/main/assets or src/main/public. https://github.com/playframework/playframework/issues/2944#issuecomment-44243541
If you put in the play plugin, read the assets or public directory.
For the sbt-web plugin, it's src / main / assets
or src / main / public
.
(That's in the documentation ...)
Could you run show play-all-assets, and see if the assets are in there? Also useful may be to run show childproject/play-prefix-and-assets, and see if the child project assets are in there. https://github.com/playframework/playframework/issues/2944#issuecomment-44359790
If you run show play-all-assets
, you will find the location of assets in the child project.
(That kind of thing is a document ...)
By the way
- show play-all-assets
+ show playAllAssets
was
sizer@sizle:~/hello-play-assets (master *+>)
$ sbt "show playAllAssets"
[info] Loading global plugins from /Users/sizer/.sbt/1.0/plugins
[info] Loading settings for project hello-play-assets-build from plugins.sbt ...
[info] Loading project definition from /Users/sizer/hello-play-assets/project
[info] Loading settings for project root from build.sbt ...
[info] Loading settings for project child from build.sbt ...
[info] Set current project to hello-play-assets (in build file:/Users/sizer/hello-play-assets/)
[info] child / playAllAssets
[info] List((public/,/Users/sizer/hello-play-assets/child/target/web/public/main))
[info] playAllAssets
[info] List((public/,/Users/sizer/hello-play-assets/target/web/public/main))
[success] Total time: 0 s, completed 2019/05/20 19:36:09
$ tree target/web/public/main/
target/web/public/main/
├── images
│ └── favicon.png
├── javascripts
│ └── main.js
├── lib
│ └── child
│ ├── images
│ │ ├── favicon.png
│ │ └── image_in_child.jpg
│ ├── javascripts
│ │ └── main.js
│ └── stylesheets
│ └── main.css
└── stylesheets
└── main.css
8 directories, 7 files
ʻAssets.at ("lib / child / images / youfile.jpg) `was in the place.
What is lib / {moduleName}
, please write such a thing in the document!
Unfriendly framework of official documentation Seriously: poop:
I made ISSUE with lib / {moduleName}
as a prefix. : thumbsup: please
It may be appropriate to put it on sbt-web
, but please let me know who you are.
https://github.com/playframework/playframework/issues/9331
Recommended Posts