Play激活器和使用sbt与播放插件有什么区别?正如我所看到的,sbt和activator已经支持许多操作,只是重新调用sbt.所以,我试图在Play Framework网页上找到解释,但是可以找到任何可以说明使用激活器而不是纯粹sbt的好处.
我遇到了非常奇怪的Java行为,我不知道它是不是一个bug,或者我错过了什么.
代码只是通过stateStack(LinkedList)列表并销毁所有状态.
public void clearStates()
{
LogFactory.getLog(StateController.class.getName())
.info( "Clearing states. #ofstates="+stateStack.size());
for (State state : stateStack) // Line 132 (see exception)
{
state.destroy();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
以下异常被抛出:
INFO controllers.StateController : Clearing states. #ofstates=1
java.lang.NullPointerException\
at java.util.LinkedList$ListItr.next(LinkedList.java:891)
at *.controllers.StateController.clearStates(StateController.java:132)
// ... //
Run Code Online (Sandbox Code Playgroud)
这段代码通常没有问题,已经生产了一年多.
这可能是Java bug吗?
/ *更新* /
destroy()调用不会修改stateStack.如果我认为Java会抛出ConcurrentModificationException.
stateStack填充了1个状态,它覆盖了destroy,但只进行了本地修改.超级实现比打印额外的日志("销毁状态......"),它不在日志文件中,所以我猜这个异常是在迭代开始时抛出的.
public void destroy()
{
destroyed = true;
LogFactory.getLog(State.class.getName()).info( "Destorying state : "+getClass().getName());
propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);
}
Run Code Online (Sandbox Code Playgroud) 我的PlayFramework(2.3)应用程序在开发模式(sbt run)中运行时没有问题.但是,当我尝试创建分发(sbt dist)或明星制作(sbt start)时,将在缩小文件夹(javascripts-min)中搜索javascript文件,该文件夹不可用.另一方面,如果使用sbt-uglify,它会创建javascripts的缩小版本,但是在同一目录(main.min.js和main.js)中.
GET http://localhost:9000/assets/javascripts-min/main.js 404 (Not Found)
GET http://localhost:9000/assets/javascripts/main.js (Ok)
Run Code Online (Sandbox Code Playgroud)
可能我需要配置一些东西以使缩小发生.我应该包含一些sbt插件还是更改应用程序配置?
是否有可能配置/传递JVM选项(即javaagent)从build.sbt到阶段构建 - 由生成的启动脚本使用.
playframework playframework-2.0 playframework-2.2 sbt-native-packager