我们有一个很大的(约215个捆绑和计数)osgi(felix + springdm)项目,使用maven和maven-osgi插件构建.
我们用maven方式遇到了几个问题:
1.子模块pom必须继承父pom才能利用公共变量和依赖关系(没关系)但是父pom必须包含所有的包,以便能够一起构建所有内容.这种循环引用很难保持同步.
2.子捆绑的单独版本是如此复杂,以至于(在我加入项目之前)决定对所有捆绑使用相同的版本.这意味着我们现在更新每个版本的所有捆绑包的版本,如果只是实际更改了它们中的一堆.这使得osgi的整个概念有点无意义恕我直言.请注意,我并不是说我们继续只触及少数捆绑包,我们会处理所有这些捆绑包,但每个版本通常都包含1或2个功能,这些功能只会影响一些捆绑包.
3.为了完成包和最终工件的部署,我们还需要另一个子模块来导入部署所需的所有包(除了少数用于测试和模拟).[编辑]请注意,这个聚合与主pom中的聚合不同,因为它不编译bundle而只是从maven存储库中选择它们.
4. maven依赖系统和osgi插件导入有时难以保持一致.忘记导入或放置错误的依赖关系太容易了.
[编辑]在每个捆绑pom中有一个这样的部分:`
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>
</Export-Package>
<Import-Package>
com.google.gson,
org.apache.log4j,
org.apache.log4j.spi,
org.dom4j,
com.myinterfaces
</Import-Package>
</instructions>
</configuration>
</plugin>`
Run Code Online (Sandbox Code Playgroud)
出于所有这些原因,我们还可以,但对maven并不十分满意.最近有人提议Gradle不是灵丹妙药,而是对当前形势的明确改进.
你会建议搬到gradle吗?如果哪种方式最好?
有其他人遇到过同样的情况吗?我认为所有与Osgi的大项目都应该是共同的.
免责声明:我寻找类似的问题:
但要么在哪里不关于osgi submodules或不关于gradle.
我现在正在学习Scala.我看到有两个测试框架,ScalaTest和Specs.我唯一的问题是我还不能用语言来决定哪个更好.此外,我习惯在代码之前编写测试,目前我还不知道如何在函数式编程中进行测试.理想情况下,我想以TDD方式学习Scala,有没有关于它的资源?
我需要像long getMillis(Date aDate)这样的函数;
返回Date秒的毫秒数.我不能使用Yoda,SimpleDateFormat或其他库,因为它是gwt代码.
我目前的解决方案正在做 date.getTime() % 1000
有没有更好的办法?
出于性能原因,我们的系统具有完全保留在内存中的结构化模型(大约30个具有多种关系的不同实体)(大约10 Gb).在这个模型上我们必须做3种操作:
目前,该体系结构是一个相当标准的体系结构,具有使用共享模型的servlet的线程池.在模型内部有很多并发集合,但仍然有很多等待,因为一些实体"更热",并且大多数线程想要读/写它们.另请注意,通常查询比写入更耗费cpu和时间.
我正在研究切换到Disruptor架构的可能性,将模型保持在一个线程中,在一个单独的消费者中将所有可能的(有效性检查,审计等)移出模型.
第一个问题当然是:它有意义吗?
第二个问题是:理想情况下,写入请求应优先于读取请求.在disruptor中优先考虑哪种方式?我正在考虑2个环形缓冲区,然后尝试从高优先级读取,而不是从低优先级读取.
澄清这个问题比LMAX Disruptor的实际代码更具架构性.
更新更多细节
数据是一个复杂的域,许多不同类型(~20)的许多实体(> 100k)在具有许多不同集合的树结构中链接在它们之间.
查询通常涉及遍历数千个实体以查找正确的数据.更新频繁但非常有限,就像10个实体一样,所以在整个数据中并没有太大变化(如小时为20%).
我做了一些初步测试,看起来并行查询模型的速度优势超过了偶尔的写锁定延迟.
显然每个Java程序员和他的狗都写了几个开源框架.我可以理解,有时框架是有用的,但在Java社区中却恰恰相反:没有使用尽可能多的框架,它被视为"非专业态度".
我的团队成员中有一半害怕编写任何代码来解决技术问题,只要他们必须添加功能,他们就可以使用google来获取框架.
当然,没有人可以成为一切的专家,但为什么你需要(例如)在大约20个框架(我上次计算)中选择服务一个简单的休息api?
它是否与Java相关并且缺少标准库(xml解析为一个)?或者它与"面向CV的编程"有关?
这是我调整图像大小的功能。质量虽然不是photoshop的,但也可以接受。
不可接受的是索引 png 上的行为。
我们预计,如果我们缩小具有透明索引的 256 色调色板的图像,我们将得到具有相同透明度的调整大小的图像,但事实并非如此。
因此,我们对新的 ARGB 图像进行了调整大小,然后将其减少到 256 种颜色。问题是如何“重新引入”透明像素索引。
private static BufferedImage internalResize(BufferedImage source, int destWidth, int destHeight) {
int sourceWidth = source.getWidth();
int sourceHeight = source.getHeight();
double xScale = ((double) destWidth) / (double) sourceWidth;
double yScale = ((double) destHeight) / (double) sourceHeight;
Graphics2D g2d = null;
BufferedImage resizedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TRANSLUCENT);
log.debug("resizing image to w:" + destWidth + " h:" + destHeight);
try {
g2d = resizedImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, …
Run Code Online (Sandbox Code Playgroud) java ×5
apache-felix ×1
concurrency ×1
cradle ×1
date ×1
frameworks ×1
image ×1
java-2d ×1
maven ×1
milliseconds ×1
osgi ×1
png ×1
scala ×1
scalatest ×1
specs ×1
tdd ×1