我正在使用IntelliJ IDEA 13编辑我的Grails应用程序,虽然它对某些事情非常聪明,但它不能很好地显示语法错误.
例如,我可以拼错一个属性或方法名称,但IntelliJ在代码中显示一个几乎没有明显的黑色下划线,悬停弹出窗口说Cannot resolve symbol 'foobar'.
如果我进入View -> Tool Windows -> Messages那时甚至没有显示这个问题Build -> Rebuild project(尽管它在第三方插件代码中显示了一些无用的弃用消息).
如何找到显示所有这些潜在问题的视图,以便我可以查看它们?
编辑 - @lukelazarovic是完全正确的,我修正了一个关于Groovy/Grails如何工作的重大误解.此外,问题还包括:
我正在尝试使用由libgdx Android Java开发框架(gdx-bullet)包装的子弹物理库,并在一段短暂的随机工作时间之后使JVM崩溃或"纯虚拟方法称为"崩溃.
其中一些生成hs_err_pidXXXX.log文件,通常包含:
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0aa0c217, pid=7956, tid=7440
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [gdx-bullet.dll+0x1c217]
Current thread (0x04af2800): JavaThread "LWJGL Application" [_thread_in_native, id=7440, stack(0x04d70000,0x04dc0000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x6572fc0f
Registers:
EAX=0x0073f370, EBX=0x0073f480, ECX=0x0073f484, EDX=0x6572fc07
ESP=0x04dbf3c0, EBP=0x04dbf400, ESI=0x0073f120, EDI=0x04dbf3f0
EIP=0x0aa0c217, EFLAGS=0x00010206
Instructions: (pc=0x0aa0c217)
0x0aa0c217: ff 52 08 f3 0f 10 05 0c f0 ba 0a f3 0f 10 4c …Run Code Online (Sandbox Code Playgroud) 我想传入的Java Servlet的Web请求使用所描述的RPC调用方法RabbitMQ的位置.
但是,我不确定如何在请求之间正确地重用回调队列,因为根据上面链接的RabbitMQ教程为每个请求创建一个新的回调队列是低效的(即使使用Queue TTL功能, RabbitMQ也可能无法应对).
每个servlet请求通常只有1-2个RPC调用,但显然每秒有很多servlet请求.
我不认为我可以在线程之间共享回调队列,所以我希望每个Web工作线程至少有一个.
我的第一个想法是将回调队列存储在ThreadLocal中,但这可能导致内存泄漏.
我的第二个想法是将它们存储在会话中,但我不确定它们是否会正确序列化,并且我的会话当前没有在Web服务器之间复制/共享,因此恕我直言不是一个好的解决方案.
我的基础设施是Tomcat/Guice/Stripes Framework.
任何想法最强大/最简单的解决方案是什么?
我是否在这整个方法中遗漏了什么,从而使事情过于复杂?
注1 - 此问题与此处描述的整体业务案例有关- 请参阅选项1.
注2 - 有一个看似相关的问题如何在Web上下文中设置RabbitMQ RPC,但它主要关注正确关闭RabbitMQ客户端创建的线程.
我想同时使用Jasper Reports(vanilla,从未使用Grails Jasper插件工作 - 看到这个)和Grails Rendering插件(一个更适合某些报告,另一个适用于其他报告).
如果我包含'com.lowagie:itext:2.1.5'或'com.lowagie:itext:4.2.1'那么我在运行Rendering插件的PDF报告时缺少com.lowagie.text.pdf.BaseFont.getCharBBox.
如果我包含'com.lowagie:itext:2.0.8',那么在运行Jasper的PDF报告时我缺少com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending.
两者都失败了java.lang.NoSuchMethodError-s.
我没有尝试过最新的iText版本,但它们有不同的软件包名称和更严格的许可,因此我认为它们不适合.
我的BuildConfig.groovy看起来像这样(前3个依赖项之一被取消注释):
dependencies {
// runtime 'com.lowagie:itext:4.2.1' // missing.BaseFont.getCharBBox
// runtime 'com.lowagie:itext:2.0.8' // missing PdfWriter.setRgbTransparencyBlending
// runtime 'com.lowagie:itext:2.1.5' // missing.BaseFont.getCharBBox
compile 'net.sf.jasperreports:jasperreports:5.2.0' // needed by jasper
runtime 'org.springframework:spring-test:3.2.4.RELEASE' // needed by rendering plugin
runtime 'commons-collections:commons-collections:3.2.1' // needed for jasper
}
plugins {
// ...
compile ":rendering:0.4.4"
// compile ":jasper:1.6.1" // couldn't get this to generate anything, but not sure it would help any …Run Code Online (Sandbox Code Playgroud) 我有一个相当琐碎的Grails单元测试:
@TestFor(DateTimeTagLib)
class DateTimeTagLibSpec extends Specification {
def setup() {
}
def cleanup() {
}
void "showTime"() {
assertEquals "14:26", new DateTimeTagLib().showTime(value: DateTime.parse("2013-01-01 14:26:00")).toString()
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用IntelliJ Idea 13 EAP中的'Run'启动它时,我得到:
java.lang.NullPointerException
at grails.test.mixin.support.GrailsUnitTestMixin.shutdownApplicationContext(GrailsUnitTestMixin.groovy:266)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Run Code Online (Sandbox Code Playgroud)
GrailsUnitTestMixin中的相关行是:
static void shutdownApplicationContext() {
if (applicationContext.isActive()) { <-- this one
Run Code Online (Sandbox Code Playgroud)
当我启动它grails test-app unit:或grails test-app :spock我得到:
| Tests PASSED - view reports in C:\projects\MyProject\target\test-reports
Run Code Online (Sandbox Code Playgroud)
然而 - 实际上的报告显示No tests executed.,尽管测试是在 …
我正在开发一个图像库,并希望以下列方式在图像底部显示标题:
默认情况下,图像显示时没有任何文本
将鼠标悬停在图像上时,底部会出现一个(可能是截断的)标题,位于深灰色的半透明背景上
最好,我的HTML保持不变; 最重要的是,图像保持为'display:inline-block',因为布局需要它们.
(可选)当鼠标悬停在标题上时(如果它被截断),它将完全展开
(可选)标题可以包含链接/整个图像是一个链接
请看图解说明:

这有点类似于http://www.flickr.com/explore和许多其他网站的做法.
这是我到目前为止所做的(实际上并不太多,因为它在垂直中间呈现标题,而不是在底部):
.image-block {
display: inline-block;
margin: 0 0 0 0;
}
.container { /* testing only */
width: 1555px;
overflow: scroll;
}
.hover-me {
position: relative;
}
.hover-me img{
width:100%;
height:auto;
display: block;
}
.hover-me:after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
background: rgba(128,128,128,.5);
transition: all .5s ease;
opacity: 0;
}
.hover-me .caption {
display: block;
height: 50%;
position: absolute;
top: …Run Code Online (Sandbox Code Playgroud)我正在构建一个Android应用程序,其中north指向真正的北方(而不是向上).我正在使用传感器框架更新轴承值,但是当我将它们应用到地图时,目标位置会在每个应用程序上漂移几米.
private void rotateCameraTo(float bearing) {
CameraPosition current = map.getCameraPosition();
LatLng lastTarget = current.target;
CameraPosition position = new CameraPosition(current.target, current.zoom, current.tilt, bearing);
map.moveCamera(CameraUpdateFactory.newCameraPosition(position));
double distance = distanceTo(map.getCameraPosition().target, lastTarget);
if (distance > 0) {
Log.d(TAG, "Target moved: " + distance);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加:
CameraPosition anotherPosition = new CameraPosition(lastTarget, current.zoom, current.tilt, bearing);
map.moveCamera(CameraUpdateFactory.newCameraPosition(anotherPosition));
Run Code Online (Sandbox Code Playgroud)
空白行在哪里,但似乎没有区别.
我还试图记住目标位置并在用户手动移动地图时更新目标位置,然后在地图的任何更新时将其设置为此类,但它导致地图变为"粘性",用户无法手动滚动地图; 在任何情况下,它似乎是一个黑客.
我在日志中大致得到这个作为输出(distanceTo返回Haversine公式结果以米为单位):
06-10 05:13:24.905 D/MapsFragment? Target moved: 10.573359329046834
06-10 05:13:24.925 D/MapsFragment? Target moved: 10.573379953568864
06-10 05:13:24.925 D/MapsFragment? Target moved: 10.580972456831576
Run Code Online (Sandbox Code Playgroud)
这似乎是一些浮点丢失的精度问题,但由于它似乎发生在谷歌地图代码中,我不知道如何解决它.
任何想法什么是在地图上进行轴承更换(旋转)而不影响其他任何事情的最佳方法?
或者,是否有另一种方法来实现一个地图,改变其方向,除了我正在做的事情之外总是指向北方?
我正在使用Spring JPA和Hibernate和PostgreSQL.
我有以下JPA存储库:
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.UUID;
public interface EventRepository extends JpaRepository<Event, UUID> {
@Query(value = "Select * From event Where ST_Intersects(ST_SetSRID(ST_MakeBox2D(ST_MakePoint(:swLongitude, :swLatitude), ST_MakePoint(:neLongitude, :neLatitude)), 4326), location)", nativeQuery = true)
Page<Event> qwerty(@Param("swLatitude") double swLatitude, @Param("swLongitude") double swLongitude, @Param("neLatitude") double neLatitude, @Param("neLongitude") double neLongitude, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
当查询是HQL并且没有nativeQuery设置时返回,因为true它工作正常.现在我需要转移到本机SQL查询,虽然添加nativeQuery = true和重写查询将解决它.
但是,我现在得到:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property qwerty found for type Event!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) …Run Code Online (Sandbox Code Playgroud) 我正在使用Akka Persistence和Cluster Sharding.为这样的PersistentActor-s 提供依赖的正确方法是什么?
据我所知,传递它们作为构造函数参数是不可能的,因为Cluster Sharding正在创建这些actor.
使用Spring/Guice/etc. 不是惯用的Scala(可能还有其他问题(?)).
使用一个object实现单例进行繁琐的测试并且看起来很糟糕.
什么是正确的方法?
PS如果您打算建议Cake模式,请在此特定的Akka Persistence Cluster Sharding上下文中提供示例代码.
dependency-injection scala akka akka-cluster akka-persistence
我正在尝试自定义我的Grails应用程序的日志配置,但是appenders(及其布局模式)似乎被忽略了.
在Config.groovy中:
log4j = {
appenders {
console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
file name: 'fileLogger', file: 'application.log', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n')
}
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
info 'grails.app'
debug 'org.hibernate.SQL'
trace 'org.hibernate.type'
}
Run Code Online (Sandbox Code Playgroud)
记录器部分实际上由Log4J考虑(例如,如果我对hibernate的调试和跟踪行进行注释,那么Hibernate语句的记录将按预期停止).
但我一直在尝试不同版本的appenders部分,似乎没有考虑到,实际上应用于控制台的格式只包含消息本身(例如,如果我写
log.info("test")
Run Code Online (Sandbox Code Playgroud)
在代码我会得到
test
Run Code Online (Sandbox Code Playgroud)
在控制台中,日志文件中没有任何内容.
我在该部分添加了"debug = true",并将'org.apache.log4j'设置为跟踪,但似乎没有任何改变.
这可能是微不足道的,但我无法弄清楚.:/
我正在使用Grails 2.3.0RC2. …
假设我正在开发一个需要显示大量不同大小和宽高比的图像的应用程序,如Flickr photostream或Google Image搜索.
是否有任何现有的算法/库可以帮助确定每行应该有多高,每行应该有多少图像,以便图像之间的间隙尽可能小,同时也不会过度调整任何图像的大小,使它们保持全部相对相似的尺寸(当然不会改变宽高比)?
理想情况下,它是一个可插拔的算法,接收图像大小,目标/平均行高,屏幕宽度列表作为输入,并返回"行分配"列表,说明哪些图像进入哪一行,具有什么尺寸,以及什么行高是.
这个Flickr页面是我想要实现的一个很好的例子:
grails ×3
image ×2
akka ×1
akka-cluster ×1
algorithm ×1
alignment ×1
android ×1
bullet ×1
css ×1
dumpbin ×1
geolocation ×1
google-maps ×1
gradle ×1
groovy ×1
hover ×1
html ×1
itext ×1
java ×1
jpa ×1
layout ×1
libgdx ×1
log4j ×1
logging ×1
maven ×1
rabbitmq ×1
scala ×1
servlets ×1
spock ×1
spring ×1
spring-data ×1
thread-local ×1
unit-testing ×1
windbg ×1