0

我正在开发一个构建系统,该系统长期以来一直存在不良做法和其他不良做法,并且我正在重新编写构建。涉及的语言是 C/C++、Fortran、Ada 和 Java,目前我坚持使用 GNU 风格的 makefile——尽管我们正在考虑其他替代方案,例如 SCons。

话虽如此,我正在寻找一些具体的建议——而不是“使用不同的构建系统”等形式的建议。

无论谁编写了我现在正在查看的特定 makefile,他都计划按顺序构建如下所示的 java 代码:

LIST_OF_JAVA_FILES  = file1.java
LIST_OF_JAVA_FILES += file2.java
LIST_OF_JAVA_FILES += file3.java
...
LIST_OF_JAVA_FILES += fileN.java

all: ${LIST_OF_JAVA_FILES}

${LIST_OF_JAVA_FILES} : %.class : %.java
  ${JAVAC} ${CLASSPATH} ${<}

如果您执行串行构建,则可以正常工作。但是,一旦依赖项混入其中,问题就会变得更加严重。

  1. C/C++ 编译器具有用于生成依赖项的内置选项……Java 是否存在类似的工具?
  2. 是否有必要使用第三方工具(如 Jikes)来生成依赖项?
  3. 通常来说,如果一个团队使用 makefiles 来构建任何与 java 相关的东西,是否更典型的是调用 java 编译器一次列出.java一个命令行中的所有文件 -vs- 每个.class文件的一个目标?
    • 如果这更常见,这是为了简单起见还是有更深层次的原因?
    • 注意:我知道对于顺序构建,这将是更快的选择,但我想要一个答案来对并行构建进行经验测试
4

3 回答 3

1

我们的项目中有类似的问题。我们决定通过ant构建所有 java 代码并从 makefile 调用 ant。

除非您有很多 JNI (c++ <----> java) 依赖项,否则这也可能对您有用。

祝你好运。

于 2011-09-01T16:28:22.000 回答
0

做类似的事情

javac -cp MY_CLASSPATH Main.java

大多数时候就足够了,因为它会自动解决依赖关系。有时您可能需要在命令行上使用更多文件,因为其中一些文件可能会在没有明确引用的情况下使用。

还有antandmavenivyand 等等,但对于这么简单的事情来说,这有点过头了。

于 2011-09-01T16:24:05.130 回答
0

最终在一个构建步骤中指定所有源文件并允许javac以这种方式解决所有依赖项是最方便的(也是整个 Java 开发的规范)。

于 2011-09-12T17:11:20.047 回答