标签: build-process

Go如何快速编译?

我用Google搜索并在Go网站上搜索,但我似乎无法找到Go的非凡构建时间的解释.它们是语言功能(或缺少),高度优化的编译器或其他东西的产品吗?我不是想推广Go; 我只是好奇.

compiler-construction performance build-process go

209
推荐指数
10
解决办法
5万
查看次数

使用Maven复制文件的最佳做法

我有配置文件和各种文档,我想使用Maven2从开发环境复制到dev-server目录.奇怪的是,Maven在这项任务中看起来并不强大.


一些选项:

  • 在Maven中简单使用复制任务

__CODE__

  • 使用Ant插件从Ant 执行复制.

  • 构造一个zip类型的工件,以及POM的"主"工件(通常是jar类型),然后将该工件从存储库解压缩到目标目录中.

  • maven-resources插件,如下所述.

  • Maven Assembly插件 - 但是当我想简单地"按常规"做事时,这似乎需要大量的手动定义.

  • 这个页面甚至展示了如何构建一个进行复制的插件!

  • maven-upload插件,如下所述.

  • 带有副本的maven-dependency-plugin,如下所述.


所有这些看起来都是不必要的:Maven应该擅长完成这些标准任务,而不用大惊小怪.

有什么建议?

build-process maven-2 release-management maven

183
推荐指数
7
解决办法
27万
查看次数

在Visual Studio中显示构建时间?

我们的构建服务器花了太长时间来构建我们的一个C++项目.它使用Visual Studio 2008.有没有办法让devenv.com记录在解决方案中构建每个项目所花费的时间,以便我知道在哪里集中精力?

在这种情况下,改进的硬件不是一种选择.

我已经尝试设置输出详细程度(在工具/选项/项目和解决方案/构建和运行/ MSBuild项目构建输出详细程度下).这似乎在IDE中没有任何影响.

从命令行运行MSBuild时(对于Visual Studio 2008,它需要是MSBuild v3.5),它显示结束时经过的总时间,但不显示在IDE中.

我真的想要一个解决方案中每个项目的时间报告,以便我可以找出构建过程花费时间的地方.

或者,因为我们实际上使用NAnt来驱动构建过程(我们使用Jetbrains TeamCity),有没有办法让NAnt告诉我每一步所花费的时间?

msbuild build-process visual-studio

168
推荐指数
9
解决办法
7万
查看次数

Maven:如何进行并行构建?

在多核/多CPU机器上使用maven构建时,通常可以并行构建不同的子项目.有没有办法用maven做到这一点?这个/什么都有插件?

build-automation build-process maven-2

140
推荐指数
3
解决办法
6万
查看次数

Bazel和Gradle有什么区别?

谷歌只是开源其构建工具Bazel.这个工具和Gradle有什么区别?Gradle不能做什么,它做得更好,Gradle做得更好?

build-process build-tools gradle bazel

134
推荐指数
3
解决办法
3万
查看次数

Java项目的构建和版本编号(ant,cvs,hudson)

Java项目中系统构建编号和版本号管理的当前最佳实践是什么?特别:

  • 如何在分布式开发环境中系统地管理构建号

  • 如何在源/可用于运行时应用程序中维护版本号

  • 如何与源存储库正确集成

  • 如何更自动地管理版本号与存储库标签

  • 如何与持续构建基础架构集成

有很多工具可用,而ant(我们正在使用的构建系统)有一个维护构建号的任务,但是不清楚如何使用CVS,svn或类似的多个并发开发人员来管理它.

[编辑]

下面出现了几个好的和有用的部分或具体的答案,所以我将总结其中的一些.听起来对我来说就像这里没有真正强大的"最佳实践",而是一系列重叠的想法.下面,找到我的摘要和一些人们可能会尝试回答的结果问题.[对stackoverflow来说是新的...如果我做错了,请提供评论.]

  • 如果您使用的是SVN,则可以使用特定结帐的版本控制.构建编号可以利用它来创建标识特定结帐/修订的唯一构建号.[我们因遗留原因而使用的CVS并没有提供这种程度的洞察力......使用标签进行人工干预可以帮助您实现目标.]

  • 如果您使用maven作为构建系统,则支持从SCM生成版本号,以及用于自动生成版本的发布模块.[出于各种原因,我们不能使用maven,但这有助于那些能够做到的人.[感谢marcelo-morales ]]

  • 如果您使用ant作为构建系统,则以下任务描述可以帮助生成捕获构建信息的Java .properties文件,然后可以通过多种方式将其折叠到构建中.[我们扩展了这个想法,包括哈德逊派生的信息,感谢marty-lamb ].

  • Ant和maven(以及hudson和巡航控制)提供了将构建号放入.properties文件或.txt/.html文件的简便方法.这种"安全"是否足以防止它被故意或意外地篡改?在构建时将它编译成"版本化"类是否更好?

  • 断言:应该在像哈德森这样的持续集成系统中定义/制定构建编号.[感谢marcelo-morales ]我们已经采纳了这个建议,但它确实破解了发布工程问题:发布是如何发生的?发布中是否有多个buildnumbers?来自不同版本的构建数量之间是否存在有意义的关系?

  • 问题:内部版本编号背后的目标是什么?它用于QA吗?怎么样?它是否主要由开发人员用于在开发期间消除多个构建之间的歧义,或更多用于QA以确定最终用户构建的内容?如果目标是可重复性,理论上这就是发布版本号应该提供的 - 为什么不呢?(请在下面作为你的答案的一部分回答这个问题,它将有助于说明你做出的建议/建议...)

  • 问题:手动构建中是否存在构建号码的位置?这是有问题的,以至于每个人都应该使用CI解决方案吗?

  • 问题:是否应将建立号码签入SCM?如果目标是可靠且明确地识别特定构建,那么如何应对可能崩溃/重启等的各种连续或手动构建系统......

  • 问题:构建号码是否应该简短且甜蜜(即单调增加整数),以便易于存档到文件名中,易于在通信中引用等等......或者它应该是多长的用户名,日期戳,机器名等?

  • 问题:请提供有关构建号分配如何适合您的大型自动发布流程的详细信息.是的,maven爱好者,我们知道这已经完成了,但并非我们所有人都喝醉了kool-aid ......

我真的很喜欢将其充实成一个完整的答案,至少对于我们的cvs/ant/hudson设置的具体例子,所以有人可以基于这个问题构建一个完整的策略.我将标记为"答案"的任何人都可以对这个特定情况给出一个疯狂的描述(包括cvs标记方案,相关的CI配置项和释放过程,将构建号折叠到发行版中,以便以编程方式如果你想询问/回答另一个特定的配置(例如,svn/maven /巡航控制),我将链接到这里的问题.--JA

[编辑09年10月23日]我接受了最高投票的答案,因为我认为这是一个合理的解决方案,而其他几个答案也包括好主意.如果有人想要用marty-lamb 's 合成其中一些,我会考虑接受另一个.我对marty-lamb的唯一顾虑是它不会生成一个可靠的序列化构建号 - 它依赖于构建器系统的本地时钟来提供明确的构建号,这并不是很好.

[编辑7月10日]

我们现在包括如下所示的类.这允许将版本号编译成最终的可执行文件.在记录数据,长期归档输出产品中发出不同形式的版本信息,并用于跟踪我们(有时是数年以后)对特定构建的输出产品的分析.

public final class AppVersion
{
   // SVN should fill this out with the latest tag when it's checked out.

   private static final String APP_SVNURL_RAW = 
     "$HeadURL: svn+ssh://user@host/svnroot/app/trunk/src/AppVersion.java $";
   private static final String APP_SVN_REVISION_RAW = "$Revision: …
Run Code Online (Sandbox Code Playgroud)

java versioning build-process build

132
推荐指数
4
解决办法
9万
查看次数

为什么是maven?有什么好处?

与让我们说蚂蚁相比,使用maven的主要好处是什么?它看起来更像是一种烦恼而不是一种有用的工具.我使用maven 2,使用普通的Eclipse Java EE(没有m2eclipse)和tomcat.

maven的支持者相信这一点

  1. Maven可以让您轻松获得包依赖性

  2. Maven强制您拥有标准的目录结构

在我的经验中

  1. 弄清楚包依赖关系并不是那么难.无论如何你很少这样做.可能在项目设置期间一次,在升级期间更多.使用maven,你最终会修复不匹配的依赖关系,写得不好的poms以及无论如何都要进行包排除.

  2. 缓慢的FIX-COMPILE-DEPLOY-DEBUG循环,可以降低生产率.这是我的主要抱怨.你做了一个改变,你必须等待maven build进入并等待它部署.没有任何热门部署.

或者我只是做错了?请指出正确的方向,我全都耳朵.

java build-process build maven

131
推荐指数
6
解决办法
16万
查看次数

用maven建立可执行jar?

我正在尝试使用maven为一个名为"logmanager"的小型家庭项目生成一个可执行jar,就像这样:

如何使用Maven创建具有依赖关系的可执行JAR?

我将那里显示的代码段添加到pom.xml中,然后运行mvn assembly:assembly.它在logmanager/target中生成两个jar文件:logmanager-0.1.0.jar和logmanager-0.1.0-jar-with-dependencies.jar.当我双击第一个jar时出现错误:

Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.
Run Code Online (Sandbox Code Playgroud)

当我双击jar-with-dependencies.jar时出现稍微不同的错误:

Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

我复制并粘贴了路径和类名,并检查了POM中的拼写.我的主要类从eclipse启动配置启动.有人可以帮我弄清楚为什么我的jar文件不会运行?另外,为什么有两个罐开始?如果您需要更多信息,请与我们联系.

这是完整的pom.xml,供参考:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.gorkwobble</groupId>
  <artifactId>logmanager</artifactId>
  <name>LogManager</name>
  <version>0.1.0</version>
  <description>Systematically renames specified log files on a scheduled basis. Designed to help manage MUSHClient logging and prevent long, continuous log files.</description>
  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.2</version>
            <!-- nothing here -->
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-4</version>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
              <archive>
                <manifest>
                  <mainClass>com.gorkwobble.logmanager.LogManager</mainClass> …
Run Code Online (Sandbox Code Playgroud)

java eclipse build-process maven-2 executable-jar

121
推荐指数
3
解决办法
15万
查看次数

我可以在obj /中将src /中的所有.cpp文件编译为.o,然后在./中链接到二进制文件.

我的项目目录如下所示:

/project
    Makefile
    main
    /src
        main.cpp
        foo.cpp
        foo.h
        bar.cpp
        bar.h
    /obj
        main.o
        foo.o
        bar.o
Run Code Online (Sandbox Code Playgroud)

我想让makefile做的就是将.cpp文件/src夹中的所有文件编译到.o文件/obj夹中的文件中,然后将所有.o文件链接/obj到顶级文件夹中的输出二进制文件中/project.

我几乎没有Makefiles的经验,我不确定要搜索什么来实现这一目标.

另外,这是一种"好"的方式,或者是否有更标准的方法来实现我的目标?

c++ build-process makefile

112
推荐指数
2
解决办法
12万
查看次数

程序可以在编译期间依赖于库而不是运行时吗?

我理解运行时和编译时之间的区别以及如何区分这两者,但我没有看到需要区分编译时和运行时依赖.

我正在窒息的是:程序如何在编译期间不依赖运行时依赖的东西?如果我的Java应用程序使用log4j,那么它需要log4j.jar文件才能编译(我的代码集成并调用log4j内部的成员方法)以及运行时(我的代码完全无法控制log4j中的代码后发生的事情) .jar跑了).

我正在阅读依赖解析工具,如Ivy和Maven,这些工具清楚地区分了这两种类型的依赖关系.我只是不明白它的必要性.

任何人都可以给出一个简单的,"国王的英语"式的解释,最好有一个实际的例子,即使像我这样的可怜的人也能理解?

java build-process runtime compile-time

106
推荐指数
5
解决办法
5万
查看次数