我希望有两个主要类(或更多)与leiningen,然后能够在java命令行中选择哪一个.例如,我有:
(ns abc (:gen-class))
(defn -main [] (println "abc"))
(ns def (:gen-class))
(defn -main [] (println "def"))
Run Code Online (Sandbox Code Playgroud)
使用project.clj:
(defproject my-jar "0.0.1"
:description "test"
:dependencies [
]
:main abc)
Run Code Online (Sandbox Code Playgroud)
然后我构建lein uberjar,并运行:
java -cp my-jar-0.0.1-standalone.jar abc
java -cp my-jar-0.0.1-standalone.jar def
Run Code Online (Sandbox Code Playgroud)
我得到它,当我:main abc在project.clj中指定它是作为清单中的主类调用它,但我不能让它运行而不放东西.但无论哪种方式,当我尝试运行'def'主要时,我得到一个未找到的类:
Exception in thread "main" java.lang.NoClassDefFoundError: def
Run Code Online (Sandbox Code Playgroud) 所以我知道之前已经完成了这个主题,例如Java Reflection Performance,但我的特殊问题是,似乎很多流行的库都是通过注释和反射来实现的(例如Gson,Jackson,Jaxb实现,hibernate搜索).许多(如果不是全部)库提供良好(或很好)的性能,即使它们使用反射.我的问题是,他们是如何做到的?是否有一些"技巧"要知道或者他们只是使用直接反射,而表演的担忧是夸大其词?
编辑:例如,当我们写:MyObject obj = new Gson().fromJson(someInputStream,MyObject.class);
我可以理解库如何在内部缓存Field对象,但在我看来,它需要每次都反射性地实例化对象,并且它需要根据json的解析值调用每个字段上的setter(反射) .或者有没有办法只在启动时支付(全部)反射成本?
我肯定注意到Gson/Jackson等具有相对较大的启动成本,之后非常快.所以很明显我想知道,如果我写一个模糊相似的图书馆,我需要了解一些技巧吗?因为看起来你无法在每次通话时远离一些反射.
我正在寻找一种自动装配的方法HttpServletResponse.它不适用于开箱即用的弹簧,但我发现了这种描述.这有点令人讨厌,因为那个春天显然有一个机制来让对象请求作用域(即HttpServletRequest),这似乎是一个劈开顶部的黑客.
有没有办法挂钩弹簧用于的相同机制HttpServletRequest?而且,任何想法为什么春季团队决定只能使HttpServletRequestautowire能够(并被排除在外HttpServletResponse)?
我需要一个非常基本的java键值存储.我从一个HashMap开始,但似乎HashMap在某种程度上是空间效率低下的(我存储了大约2000万条记录,而且似乎需要大约6GB的RAM).
地图是Map<Integer,String>,所以我正在考虑使用GNU Trove TIntObjectHashMap<byte[]>,并将地图值存储为ascii字节数组而不是String.
作为替代方案,是否有一个键值存储只需要添加jar文件,不会立即将整个映射保存在RAM中,并且仍然相当快?
我想使用bootstrap的轮播来动态滚动内容(例如,搜索结果).所以,我不知道会有多少页内容,除非用户点击下一个按钮,否则我不想获取后续页面.
我看了这个问题:带有动态内容的轮播,但我不认为答案适用,因为它似乎建议从数据库服务器端加载所有内容(在这种情况下的图像)并将所有内容作为静态内容返回.
我最好的猜测是拦截按下按钮上的click事件,对搜索结果的下一页进行ajax调用,在ajax调用返回时动态更新页面,然后为旋转木马生成幻灯片事件.但是这些都没有在引导页面上真正讨论或记录.欢迎任何想法.
我正在尝试让PowerMock与mockito一起使用,我在这里关注文档:http://code.google.com/p/powermock/wiki/MockitoUsage13.
为了简化一下,我们假设我有一个静态方法:
StaticObj.put(String key, String val) { ... }
Run Code Online (Sandbox Code Playgroud)
要测试的类是这样的:
public class ClassToTest {
public void doSomething(Params p) {
if (StringUtils.isNotBlank(p.getK()) StaticObj.put("k1", p.getK());
if (StringUtils.isNotBlank(p.getX()) StaticObj.put("x1", p.getX());
}
}
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我想验证当它们不为空或为null时,为K和X调用StaticObj.put,所以我做了类似这样的事情:
public void testNormalCase() {
// assume that mocking setup for statics already happened in some @Before function..
Params params = new Params("k", "x");
ClassToTest classToTest = new ClassToTest();
classToTest.doSomething(params);
// now I want to verify:
PowerMockito.verifyStatic(times(1));
StaticObj.put("k1", "k1");
PowerMockito.verifyStatic(times(1));
StaticObj.put("x1", "x");
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,这是我所期待的.什么不起作用,如果我注释掉K的验证,那么X的验证失败了!错误消息表明("x1","x")是预期的,但得到了("k1","k").为什么是这样?我没有正确编码吗?
此外,它让我相信以下类型的测试,可能完全通过错误的原因:
public void …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
final SortedMap<Integer,List<Integer>> m = new TreeMap<Integer,List<Integer>>();
Run Code Online (Sandbox Code Playgroud)
我想使用google-guava将其设为多图.但是,我没有看到任何提供包含ArrayList的SortedMap的实现.我只看到HashMap + ArrayList实现(ArrayListMultimap).我想要的实现是否存在?
我希望能一起使用Scala和Gson.它似乎主要工作,但当我做这样的事情时,它将列表视为一个对象,而不是一个数组:
case class MyType (val x:String, val y:List[SomeOtherType]) {
def toJson() = new Gson().toJson(this)
}
Run Code Online (Sandbox Code Playgroud)
我的JSON结果是这样的:
{
"x":"whatever",
"y": {
}
}
Run Code Online (Sandbox Code Playgroud)
通常Gson将列表转换为数组.我确定这都是因为Gson不了解Scala的收集课程,但是我能做些什么才能使这个工作成功?或者使用Scala-native JSON库的其他建议?
我读过以下内容:
http://wiki.apache.org/solr/SolrPerformanceFactors
http://wiki.apache.org/solr/SolrCaching
http://www.lucidimagination.com/content/scaling-lucene-and-solr
我对以下几点有疑问:
-XX:+UseCompressedStrings,我可以节省多少内存?举一个简单的例子,如果我有一个索引字段(字符串)和一个存储字段(字符串),omitNorms = true和omitTf = true,我可以期望在索引和文档缓存中节省多少?我猜大约50%,但也许这太乐观了.*:*吗?我正在使用hiccup-1.0.0-beta1创建一个compojure项目.我运行时得到以下堆栈跟踪lein ring server-headless:
Caused by: java.lang.IllegalAccessError: defelem does not exist
at clojure.core$refer.doInvoke(core.clj:3287)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_lib.doInvoke(core.clj:4781)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4800)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at hiccup.page_helpers$eval17$loading__4414__auto____18.invoke(page_helpers.clj:1)
at hiccup.page_helpers$eval17.invoke(page_helpers.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
Run Code Online (Sandbox Code Playgroud)
这对我来说很困惑,因为page_helpers.clj打嗝中的文件不再存在:
$ jar tf lib/hiccup-1.0.0-beta1.jar
META-INF/MANIFEST.MF
META-INF/maven/hiccup/hiccup/pom.xml
META-INF/maven/hiccup/hiccup/pom.properties
project.clj
hiccup/compiler.clj
hiccup/core.clj
hiccup/def.clj
hiccup/element.clj
hiccup/form.clj
hiccup/middleware.clj
hiccup/page.clj
hiccup/util.clj
$
Run Code Online (Sandbox Code Playgroud)
此外,我的代码甚至没有尝试引入page_helpers.clj:
(ns views.layout
(:require [app-config :as config])
(:use hiccup.core)
(:use hiccup.page)
(:use hiccup.element))
Run Code Online (Sandbox Code Playgroud)