我目前正在从我的多模块Web应用程序的ant转换为gradle,目前似乎当前版本的Gradle(M9)可能正在运行它的极限.但也许(希望)这只是一个问题,我不能理解Gradle的概念,或者不了解"魔术性能提升开关".我很高兴有关如何优化构建性能的任何暗示.
问题:在compileJava显示第一个问题之前经过几分钟,即使源中没有任何变化,该过程至少运行7分钟,直到它在中途崩溃:testClasses(在不同的子项目中),并显示以下消息:
* What went wrong:
Could not resolve all dependencies for configuration ':mysubproject_X:testRuntime'.
> Java heap space
Run Code Online (Sandbox Code Playgroud)
该项目由大约30个(部分相互依赖的)子项目组成,它们的build.gradle或多或少相同,用于从每个子项目构建jar文件,例如
sourceSets {
main {
java {
srcDirs 'src'
}
}
}
dependencies {
compile project(':mysubproject_A')
compile project(':mysubproject_B')
compile project(':mysubproject_E')
compile group: 'commons-lang', name: 'commons-lang', version: '2.2'
}
// copy all non-java files from src
copy {
from sourceSets.main.java.srcDirs
into "$buildDir/classes/main"
exclude '**/*.java'
}
jar {
}
Run Code Online (Sandbox Code Playgroud)
我试图通过将最大内存大小增加到1024M来解决堆空间问题,但它没有帮助.我的main build.gradle文件如下所示:
sourceCompatibility = 1.6
version = 0.5
useFindBugs = false …Run Code Online (Sandbox Code Playgroud) 我目前正在测试使用jdk-9 + 149将Java 8应用程序迁移到Java 9/Jigsaw.
该项目已在标准的Maven目录结构进行布局,即具有src/main/java,src/test/java等等.
当我添加module-info.java到src/main/java,Maven的编译器插件无法抛出一个NullPointerException.这是因为它希望找到test目录的模块信息.所以,据我所知,选项是:
显然,这些选项似乎都不合适,所以我假设有一种在Maven项目中测试Jigsaw模块的推荐方法.不幸的是,我既没有找到建议也没有例子.
编辑:在发布问题时添加一些我不相关的信息(对不起)
migration unit-testing maven java-platform-module-system java-9
我在我的项目中使用以下代码来使用log4j记录调试消息
private static final Logger LOG = Logger.getLogger(MyClass.class)
// ...
if(LOG.isDebugEnabled()) {
LOG.debug("my log message");
}
Run Code Online (Sandbox Code Playgroud)
我可以通过在写入调试消息的行添加断点来确认我的log4j配置是否正确,即LOG.isDebugEnabled()返回true.有趣的是,我的调试消息并不在我的IDE(的IntelliJ)的控制台但是当改变显示,LOG.debug()到LOG.info()如预期将记录信息消息.
任何想法我应该寻找什么,以找出这里出了什么问题?
编辑:这是我的log4j.properties文件
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.conversionPattern=%-5p [%d{dd.MM.yy HH:mm:ss}] %C{1} - %m [thread: %t]\n
log4j.appender.Stdout.threshold=info
log4j.appender.StandaloneFile=org.apache.log4j.RollingFileAppender
log4j.appender.StandaloneFile.File=logs/standalone.log
log4j.appender.StandaloneFile.MaxFileSize=5MB
log4j.appender.StandaloneFile.MaxBackupIndex=20
log4j.appender.StandaloneFile.layout=org.apache.log4j.PatternLayout
log4j.appender.StandaloneFile.layout.ConversionPattern=%-5p [%d{dd.MM.yy HH:mm:ss}] %C{1} - %m [thread: %t]\n
log4j.appender.StandaloneFile.threshold=info
log4j.rootLogger=info, Stdout, StandaloneFile
log4j.logger.com.myPacke.package1=info, Stdout, StandaloneFile
log4j.logger.com.myPacke.package2=DEBUG
Run Code Online (Sandbox Code Playgroud) 我的网络服务器上运行了几个webapp:
https://beta.mydomain.tld/svn/reposhttps://beta.mydomain.tld/trachttp://beta.mydomain.tld/端口8080上的本地Apache Tomcat的代理访问请注意,前两个可通过SSL获得,第三个不是(尚未).现在我需要通过https提供我的网络应用程序,但我希望Trac和SVN浏览器仍可在其当前位置访问.
即我想配置的Apache2代理所有请求没有开始svn或trac到Tomcat.
对于现有的SSL Web应用程序,有以下配置
<Location /svn/repos>
DAV svn
SVNParentPath /home/myuser/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /home/myuser/.htpasswd
Require valid-user
</Location>
<Location /trac>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /home/myuser/trac
PythonOption TracUriRoot /trac
AuthType Basic
AuthName "Trac"
AuthUserFile /home/myuser/.htpasswd
Require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)
我试图添加以下位置,但它没有任何帮助...
<Location />
ProxyPass http://localhost:8080
ProxyPassReverse http://localhost:8080/
</Location>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,这里是关于SSL部分的完整apache2配置(没有任何我失败的试验 - 我认为它是默认的trac配置):
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName beta.mydomain.tld:443
DocumentRoot /var/www/
<Directory /var/www/>
Options Indexes …Run Code Online (Sandbox Code Playgroud) 我目前正在测试将现有应用程序迁移到Jigsaw Modules.我的一个模块使用ElasticSearch及其Groovy插件.
不幸的是,他们共享一个拆分包,所以mvn install给我:
x从lang.groovy和elasticsearch读取包org.elasticsearch.script.groovy
对于描述符中的每个必需模块,其中x是每个模块的名称.
我假设一个较新的elasticsearch版本将在Java 9最终版本的时候取消拆分包,但是通常有一种方法来处理遗留依赖项中的拆分包吗?
我希望能够在类路径而不是模块路径上有那些,但是在邮件列表上阅读这个对话后,似乎没有办法告诉Maven编译器这样做.
maven 3.3.9 - maven-compiler-plugin 3.6.0 - jdk9-ea + 149 - elasticsearch 2.3.3
maven java-platform-module-system maven-compiler-plugin java-9
我的管理Web应用程序使用basic-auth以下方
<security-constraint>
<web-resource-collection>
<web-resource-name>myApp</web-resource-name>
<description>
Security constraint for
Admin resources
</description>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description>
constraint
</description>
<role-name>myrolename</role-name>
</auth-constraint>
<user-data-constraint>
<description>SSL not required</description>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Admin Login</realm-name>
</login-config>
Run Code Online (Sandbox Code Playgroud)
但是,我需要为单个URL建立排除(例如/ check /,由自动服务使用,检查Web应用程序是否仍然定期运行.
不幸的是,我无法为此服务激活基本身份验证.
我怎么能做到这一点?
非常感谢.
升级到Grails 2.2后,我得到了这个例外
类: groovy.lang.MissingMethodException
信息:
没有方法签名:static org.codehaus.groovy.runtime.InvokerHelper.getVersion()适用于参数类型:()值:[]
仅在index.gsp上发生异常 - 如何摆脱错误?
确保数组元素上的索引对我来说没有按预期工作。
例如使用以下数据
> db.test.find()
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
{ "_id" : 7891236424, "arr" : [ "b", "c", "d" ] }
{ "_id" : 7891236425, "arr" : [ "b", "c", "a" ] }
>
Run Code Online (Sandbox Code Playgroud)
当没有索引时,以下查询按预期工作
> db.test.find({"arr.0":"a"})
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
>
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在其上创建索引,则相同的查询不会返回结果 arr.0
> db.test.ensureIndex({"arr.0":1})
> db.test.find({"arr.0":"a"})
>
Run Code Online (Sandbox Code Playgroud)
我不明白这里发生了什么,在我看来,索引永远不应该对返回的数据产生影响。还是应该?
这是一个错误吗?还是索引滥用?对于这种行为的任何解释,我很高兴,甚至对如何在单个数组元素上实现索引的任何提示都感到高兴。
PS:我知道我可以在arr查询arr之前先创建索引并查询arr.0,这是给定示例的有效解决方法。但是,一旦我需要对大量数据进行排序,这并没有帮助arr.0(MongoDB 需要一个索引)
扫描 ElasticSearch 索引时,不可能根据文档应用任何排序。但是这个过程中结果的顺序有什么定义吗?如果是的话,是可以预测的吗?
背景资料:
我需要定期对 5M 个文档进行操作,每批 1000 个文档大约需要 1 分钟处理时间。由于我无法确保每次运行该过程都会完成,因此我想让它在上次中断的地方继续工作,例如,如果滚动结果按ID(我知道,它是不),我会跟踪ID代码中最后处理的内容,并且在下一次运行时不再使用 处理任何文档ID <= lastProcessedId,以确保每个文档都得到定期处理。
顺便说一句:“处理文档”并不是指将附加信息写回索引,而是更新数据库中的其他一些内容。在我的情况下,向索引文档写入时间戳不会有帮助,因为进程中断的原因之一可能是索引被替换为新索引(从头开始重新构建)。将处理后的时间戳写入数据库对我来说也不是一个理想的选择,因为迭代性能是我首先使用索引滚动的原因......
使用域或命令对象验证不能总是合理地检查例如用户输入错误的错误.
例如,在创建"忘记密码"功能时,如果用户输入数据库中不存在的用户名,我希望显示足够的消息.所以控制器动作就是这样的
...
def user = User.find{name==uname}
if(!user) {
// user not found in db, output error and render view again
render view: 'forgotPassword'
return
}
// do reset password stuff
...
Run Code Online (Sandbox Code Playgroud)
如何在<g:hasErros>标记内的视图中显示错误?
flash.message(因为生成的控制器/视图这样做)对我来说似乎不对,因为我不只是显示信息消息,而是一条错误消息.这就是为什么我认为消息应该由<g:hasErros>标签处理并显示为域验证错误.(对于用户来说,它是相同的反馈级别:"由于输入错误而无法工作".
创建@Validateable命令对象似乎也不正确.恕我直言,检查数据库的值实际上不是命令对象中的验证责任?或者是吗?那对我来说似乎有点太复杂了.
那么最好的方法是什么?其他框架(例如检票)提供不同的方法,如error(String msg)和info(String msg),其允许容易处理在视图反馈消息.Grails中是否有类似的概念,我还没有找到它?
grails ×2
java-9 ×2
java-platform-module-system ×2
maven ×2
apache2 ×1
build ×1
controller ×1
gradle ×1
groovy ×1
heap ×1
indexing ×1
java ×1
log4j ×1
logging ×1
migration ×1
mod-proxy ×1
mongodb ×1
nosql ×1
performance ×1
scroll ×1
security ×1
tomcat ×1
unit-testing ×1
upgrade ×1
version ×1
view ×1
virtualhost ×1
web.xml ×1