我们的软件由可部署的服务器组件和RCP应用程序组成。这些应用程序仍然共享许多代码。
现在,我们已经有了Maven反应堆,其中包含了我们所需的所有代码,它们都是“普通” JAR,即使同时也添加了捆绑软件的 Manifest 信息。
并且我们的所有捆绑软件都有Tycho反应堆,这些堆仅在OSGi上下文中使用过。
对于每个技术模块,这意味着我们有两个反应堆,从体系结构的角度来看这是完全错误的。这就是为什么我想要一个反应堆。
如果将所有内容放入 Maven 反应堆中,则会出现以下问题:
import Data.List(partition)
main :: IO ()
main = do
print $ show tmp
input = [[1,3],[1,3],[1,3],[1,3],[2,1],[2,1],[2,1],[2,2],[3,2],[3,2],[3,2]]
tmp = combinations input
-- this function turns list into list of pair, first element is element of the
-- input list, second element is rest of the list
each :: [a] -> [a] -> [(a, [a])]
each h [] = []
each h (x:xs) = (x, h++xs) : each (x:h) xs
combinations :: (Eq a) => [[a]] -> [[a]]
combinations l = concat $ map combine $ each [] l
where
-- take pair ("prefix list", "unused lists")
combine :: (Eq a) => ([a], [[a]]) -> [[a]]
combine (x, []) = [x]
combine (x, xs) = let
l = last x
-- split unused element to good and bad
(g, b) = partition (\e -> l == head e) xs
s = each [] g
-- add on element to prefix and pass rest (bad + good except used element) to recursion. so it eat one element in each recursive call.
combine' (y, ys) = combine (x ++ tail y, ys ++ b)
-- try to append each good element, concat result
in concat $ map combine' s
,但这是真的很乏味)但是,如果我将所有物品放入 Tycho 反应堆中,则会发生以下情况:
我们不能拥有Maven and Tycho in the same reactor。
那么有什么办法可以将一个项目的所有JAR和捆绑包放在同一反应堆中?