问题标签 [software-product-lines]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
535 浏览

git - 为两种不同设备开发代码的 git 最佳实践

我正在开发一个 HTML 应用程序,它将 1. 使用 Phonegap Build 2 编译。在 www 服务器上作为纯 Web 应用程序提供

所以代码将基本相同,但会有专门用于第一次或第二次改编的小部分。

但是对基础代码的改进将不得不推动这两种适应。

那么我应该使用一个 git 存储库并创建分支还是应该使用多个存储库?

我是 git 新手,请问您能写下工作流命令吗?

0 投票
1 回答
235 浏览

git - Git 有两个版本作为分支

我有一个有两个不同版本的项目。每个版本都在另一个分支上,它们永远不会合并在一起。大多数代码是相同的,但每个分支都有其独特的部分。现在我需要将几乎所有的提交都提交到两个分支中。

目前我为此使用樱桃采摘:我切换到另一个分支并选择我需要的所有提交。

我不喜欢我这样做的方式。选择每一个提交都需要一些时间,而你的我可能会错过一个。

如何在不丢失唯一更改的情况下保持两个基本相同的分支同步?

我已经阅读了几篇关于类似主题的帖子,但似乎都不适用于我的情况:

我还阅读了这个不错的 git 分支指南,但我也在这里找不到合适的解决方案。修补程序分支最接近,我想创建一个,但我认为合并会覆盖东西。

0 投票
3 回答
9963 浏览

powershell - 如何使用 Jenkins 多配置(矩阵)类型的项目?

Jenkins Matrix 项目的官方 Wiki 页面并没有真正帮助我;所以我有几个问题。

我们正在尝试构建几个本质上相同的项目,只是有些项目为我们的客户打上了不同的品牌。换句话说,软件/测试/等都是相同的,除了将BrandA变成BrandB(或BrandC等)的一些调整。

我想我应该使用 Matrix 项目为 BrandA、BrandB 等创建构建。虽然我还没有弄清楚我的所有步骤(包括如何在构建后重命名可执行文件),但我知道我需要通过在构建过程中为我的许多 Jenkins Powershell 脚本添加品牌名称,然后在脚本中使用该品牌。

如何将这些变量放入我的脚本中?它们是否会自动传递到 Jenkins 的每个构建步骤?要使用的变量名称是什么?

最后,在 Jenkins 中构建这些多配置项目是否有很好的资源?我似乎无法在网上找到任何全面的东西。

0 投票
1 回答
121 浏览

emf - 使用 FeatureIDE 检测配置错误

有没有办法通过 FeatureIDE 针对用户定义的约束以编程方式检测配置文件中的验证错误?如果是这种情况,我应该如何继续检测它们并更改经过验证的配置?我使用 AHEAD 作为面向特征的语言。

0 投票
3 回答
117 浏览

css - 通过 Rails 管理大型应用程序

今年我们在 Rails 3 中开发了一个应用程序(计划升级到 rails 4)。我们已经把它卖给了 2 个客户,现在问题将开始。

在核心中,除了样式表、一些 html 和一些类之外,所有应用程序都或多或少相同。

现在我正在寻找一种方法来管理这些应用程序,例如当我们有 100 个客户运行该产品时。

因此提出以下问题:

  • 您如何管理所有客户的更新?
  • 您如何管理所有客户的修复(对于 2 个客户,我现在只是挑选,但对于 100 个客户,您不能这样做,有些客户的代码是不同的,所以像批量挑选这样的东西并不总是有效)
  • 你如何管理新客户?
  • 是否可以使用样式表文件将代码与drupal 中的样式分开?
  • 任何更多的问题都可以随时添加。

亲切的问候。

EDIT1:我们提供的是一个有核心的站点,但每个客户都可以更改站点的任何内容,从核心到设计。

EDIT2: RAILS 代码:我们有一个 Rails 管理界面,假设我们通过设置使所有代码可定制:

CSS / SASS 代码:假设我们制作了 1 个干净的 CSS,并且我们为每个客户创建了一个覆盖所有标准代码的覆盖类。

EDIT3:假设 50 个客户中的每一个都有 3 个分支,一个 DEV / QUALITY / PRODUCTION 系统。我们为所有客户开发了一个修复程序,您如何将此修复程序部署到所有客户?

0 投票
1 回答
560 浏览

c++ - CMake find_package 可以“感知通用依赖版本”吗?

问题:

我正在重做我们遗留项目中的 make 系统,从目前的神秘版本更改为 CMake。目前,我已经让 CMake 将整个事情视为一个大型 CMake 项目,但我们的代码库非常庞大,以至于它破坏了我们投入它的大多数 IDE。

我们想将其拆分,CMake 的 find_package “模块模式”似乎非常适合将其拆分为“特征大小”的块。主要候选者是一大块只需要很少维护的代码,即便如此,它通常也由另一个团队维护。这将允许我们维护代码,但在更新不同代码时不会不断地重新编译它。

也就是说,这段代码在 API 中使用了 Boost 的共享指针,虽然不同版本的共享指针可能会一起工作,但我宁愿不要冒险。所以,理想情况下,包会知道系统正在使用什么版本的“boost”,编译模块时使用的boost版本,并且能够重新编译——或者,至少,抛出一个错误或 CMake 中的警告——如果两者不匹配。

那么......如何确保公共依赖项的版本在 CMake find_package 模块中匹配?我唯一能想到的是测试适当的 VERSION 变量,但这似乎......笨重。有什么我想念的吗?

附加信息:

我们正在使用 CMake 3.5.1,但如果这会有所不同,我们可以升级到 3.5.2。这个项目实际上是一个软件产品线 (qv),因此我们计划在未来的某个时候使用更现代的 SPL 软件工程技术(这也是选择 CMake 的另一个原因)。代码库目前在 Redhat Linux 中,但理想情况下,该技术将是跨平台的。

0 投票
4 回答
488 浏览

software-product-lines - 软件产品线特征模型

请帮我。我想通过考虑特征模型的约束来找到所有可能的特征组合。如图所示。有没有通用的公式或工具?请建议我任何自动方法。

功能型号:

在此处输入图像描述

0 投票
0 回答
160 浏览

node.js - Node.js:从一个 package.json 构建多个产品线

我们正在构建一个 Node.js 应用程序。当我们通过基于主干的开发实践持续交付时,我们将只有一个分支和一个构建可以使用。

出于包括法律要求在内的多种原因,我们预计在我们开发下一个功能版本的任何时候都会为当前发布的版本提供补丁版本。更重要的是:有些功能和/或活动无法进入下一个功能版本。

显然,任何新功能都必须从补丁版本中排除,任何我们不会制作的下一个功能版本的东西都必须从下一个版本中排除。

为了测试(和发布测试版),我们正在构建和测试产品的三个版本,比如 1.0、1.1 和 1.2。

使用功能切换来排除功能。

问题:我如何才能排除仅对下一个功能版本有效的依赖项,甚至稍后将其放入node_modules构建期间?

如果是两行,我会尝试使用package.json.

有没有其他方法可以确保:

  • 1.1 及之后的依赖项没有进入 1.0
  • 1.2 及之后的依赖项没有进入 1.0 和 1.1
  • require(...) 不会因为不存在的依赖项而失败(使用功能切换包装???)

有没有办法package.json在每个版本的构建过程中避免保留三个并选择“恰到好处”的一个?

0 投票
3 回答
116 浏览

c# - 自动重新生成 Visual Studio 项目但修改参考

这个问题可能太宽泛了,但是...

我有 300 个项目(比如 project1_v1.sln、project2_v1.sln...)都依赖于 1 个类库(比如 classLib_v1.sln),每 3 个月我们需要对类库(接口和实现)进行一次小修改,其中会破坏一些项目,然后你修复这些项目并部署......讨厌......

但....

与其修改现有项目,不如将它们重新生成为新的“分支”版本......

所以...克隆 classLib1.sln 以使 classLib2.sln 进行修改,然后将 project1_v1.sln 重新生成为 project1_v2.sln,它引用 classLib2 而不是 classLib1 ...编译...并修复。

即每个项目都有 2 个版本。

感觉就像某种产品的自动化“生产线”。

我们确实使用 TFS,但我们的版本控制是非常线性的,所以我特别不知道如何处理这样的事情而不会造成混乱。

想法?


有几个有用的响应,但要明确一点,这不是要避免重大更改,代码会中断,而是要自动更改(引用),然后使用该自动化告诉我们代码在哪里坏了。

依赖注入被认为是一种解决方案,并且可以使用,但您仍然需要自动更改配置,缺点是可配置的 DI 不是类型安全的,因此编译器无法再告诉您您在哪里有问题。

0 投票
1 回答
37 浏览

java - Java 桌面应用产品线管理和发布

我目前正在开发一个 Java 桌面应用程序,其中包含一些模块,这些模块应该在不同版本的工具中启用或禁用(例如,仅适用于管理员的管理工具,...)。有没有关于源代码控制管理和发布(发布)的最佳实践?我正在使用 Git,我的想法是为每个版本创建一个发布分支,删除所有不必要的模块,然后在发布之前构建应用程序。手头的任务有更好的方法吗?

谢谢!