假设,我有一个依赖于某个库的开源项目,必须修补它才能解决一些问题.我怎么做?我的想法是:
一个不错的解决方案是使用修补的库源创建一个独特的项目,并使用-patched限定符将其部署在本地/企业存储库中.但这不适合开源项目,任何检查其来源的人都可以轻松构建.或者我应该只说"并且,在构建我的项目之前,请检查那些东西并运行mvn install".
我遇到了一个很好的Java小型Web请求框架:Spark.API看起来不错,很有希望,但是库包本身很奇怪.不要理会它建议使用快照工件作为依赖项.单独留下它使用log4j进行日志记录(库现在倾向于使用jcl或slf4j)和System.out.println的事实.但它将自己的log4j.properties捆绑在spark-xxx.jar中.我花了一个小时来调查为什么当我的类路径中存在log4j.properties时,我的项目会抱怨log4j配置.-Dlog4j.debug = true给出了答案,log4j承认它已经从spark jar加载了log4j.properties.
我想知道这个(作为一个库并使用log4j和捆绑log4j.properties)是否有一些动机,或者它是否只是蹩脚.
我有一个模型类
public class MyClass extends ReflectionDBObject {
private List<NiceAttribute> attributes;
...
}
public class NiceAttribute extends ReflectionDBObject {
...
}
Run Code Online (Sandbox Code Playgroud)
我以类型安全的方式创建它,比如
List<NiceAttribute> attrs = new ArrayList<NiceAttribute>();
attrs.add(new NiceAttribute());
MyClass myClass = new MyClass();
myClass.setAttributes(attrs);
Run Code Online (Sandbox Code Playgroud)
然后将其保存到mongo,并使用类似的代码检索
DBCollection col = ...;
col.setObjectClass(MyClass.class)
MyClass foundObject = (MyClass)col.findOne();
Run Code Online (Sandbox Code Playgroud)
但问题是,foundObject的attributes变成了一个列表BasicDBObject.看起来驱动程序不能(或不想)检测列表项类型.这是司机限制,还是我错过了什么?这个问题的优雅解决方案是什么?
顺便说一句,我知道Morphia等.也许它解决了这个问题.但是我的项目很小,而且我不想让具有更多抽象层的东西复杂化.
我必须应用某种转变fn(argument).这argument等于value,但不是当它是负面的.当你得到第一个负数时value,那么你"等待"直到它与连续值相加并且这个总和变为正数.然后你做fn(argument).看到我想要的表格:
value argument --------------------- 2 2 3 3 -10 0 4 0 3 0 10 7 1 1
我可以将所有值求和并应用于fn总和,但fn对于不同的行可以有所不同,并且必须知道行号以选择具体的fn.
想要一个Postgres SQL解决方案,看起来像窗口函数适合,但我没有足够的经验来编写那样做的表达式.事实上,不幸的是,我是"思考sql"的新手.我想这可以通过命令式方式轻松完成,但我还不想编写存储过程.
java ×2
aggregation ×1
log4j ×1
logging ×1
maven-2 ×1
mongodb ×1
patch ×1
postgresql ×1
spark-java ×1
sql ×1