Questions tagged «build-process»

将源代码文件转换为可以在计算机上运行的独立软件工件的过程

9
Java项目的构建和版本编号(ant,cvs,hudson)
Java项目中系统内部版本号和版本号管理的当前最佳实践是什么?特别: 如何在分布式开发环境中系统地管理内部版本号 如何在源代码中维护版本号/可用于运行时应用程序 如何与源存储库正确集成 如何更自动地管理版本号和存储库标签 如何与持续构建基础架构集成 有很多可用的工具,而ant(我们正在使用的构建系统)的任务将维护一个构建号,但是目前尚不清楚如何使用CVS,svn或类似的工具与多个并发开发人员一起管理该数目。 。 [编辑] 下面出现了几个很好的有用的部分或特定答案,因此我将总结其中的一些。在我看来,这并不是真正的“最佳实践”,而是一些相互重叠的想法。在下面,找到我的摘要以及随之而来的人们可能会尝试回答的一些问题。[stackoverflow的新功能...如果我做错了,请提供评论。] 如果您使用的是SVN,则特定的结帐版本会随之增加。内部编号可以利用此编号来创建唯一的内部编号,以标识特定的结帐/修订。[出于遗留原因,我们使用的CVS并不能提供如此深入的了解...使用标签进行手动干预会使您有所作为。] 如果将maven用作构建系统,则支持从SCM生成版本号,以及用于自动生成发行版的发行版模块。[出于多种原因,我们不能使用Maven,但这可以帮助那些可以使用Maven的人。[感谢marcelo-morales ]] 如果您使用ant作为构建系统,则以下任务描述可以帮助生成捕获构建信息的Java .properties文件,然后可以通过多种方式将其折叠到构建中。[感谢marty-lamb,我们将这个想法扩展到包括来自哈德逊的信息]。 Ant和Maven(以及Hudson和Cruise Control)提供了将内部版本号获取到.properties文件或.txt / .html文件的简便方法。这个“安全”足以防止它被有意或无意地篡改吗?在构建时将其编译为“版本”类更好吗? 断言:应在诸如hudson的连续集成系统中定义/制定内部版本号。[感谢marcelo-morales ]我们采纳了这个建议,但是它确实解决了发布工程问题:发布是如何发生的?版本中是否有多个内部版本号?不同发行版的内部版本号之间是否存在有意义的关系? 问题:内部编号背后的目标是什么?是否用于质量检查?怎么样?是开发人员主要使用它在开发过程中消除多个版本之间的歧义,还是让质量检查人员确定最终用户获得了什么版本?如果目标是可复制性,那么从理论上讲,这就是发行版本号应提供的内容-为什么不提供?(请在下面的回答中作为一部分回答,这将有助于阐明您所做的/建议的选择...) 问题:手动构建中是否存在内部版本号?这是否有问题,以至每个人都应该使用CI解决方案? 问题:是否应将内部版本号签入SCM?如果目标是可靠,明确地确定特定的构建,则如何应对可能会崩溃/重新启动等的各种连续或手动构建系统。 问题:内部版本号短而甜美(即,单调递增的整数),以便它易于粘贴到文件名中进行存档,易于在通信中引用等……还是应该长而又充满用户名,日期戳,机器名称等? 问题:请提供有关内部编号分配如何适合较大的自动发布过程的详细信息。是的,Maven爱好者,我们知道这已经完成了,但是并不是我们所有人都已经喝了苦艾酒。 我真的很想将其充实为一个完整的答案,至少对于我们的cvs / ant / hudson设置的具体示例而言,这样,有人可以根据此问题制定出完整的策略。我将标记为“答案”的任何人都可以为此特定情况提供详尽的描述(包括cvs标记方案,相关的CI配置项以及将内部版本号折叠到版本中的发布过程,以便以编程方式进行如果您要询问/回答其他特定配置(例如svn / maven / cruise控件),我将在此处链接到该问题。--JA [编辑2009年10月23日]我接受了投票最多的答案,因为我认为这是一个合理的解决方案,而其他几个答案也都包含了好主意。如果有人想破解使用marty-lamb合成其中的某些内容,我将考虑接受另一种。我对marty-lamb的唯一担忧是,它不会生成可靠的序列化内部版本号-它依赖于构建者系统上的本地时钟来提供明确的内部版本号,这并不好。 [编辑7月10日] 现在,我们包括一个如下所示的类。这样可以将版本号编译到最终的可执行文件中。版本信息的不同形式会在日志数据,长期归档的输出产品中发出,并用于将我们(有时是几年后)对输出产品的分析追溯到特定的版本。 public final class AppVersion { // SVN should fill this out with …

9
为什么行家?有什么好处?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 与使用ant相比,使用maven的主要好处是什么?它似乎比有用的工具更令人讨厌。我将maven 2与普通的Eclipse Java EE(无m2eclipse)和tomcat一起使用。 Maven的支持者认为 Maven让您轻松获取软件包依赖关系 Maven强制您使用标准目录结构 在我的经验中 弄清软件包的依赖关系并不难。无论如何,您很少这样做。在项目设置过程中大概一次,在升级过程中可能再一次。使用maven,您最终将解决不匹配的依赖项,错误编写的pom,以及无论如何都要进行包排除。 FIX-COMPILE-DEPLOY-DEBUG周期缓慢,这会降低生产率。这是我的主要抱怨。进行更改后,您必须等待Maven构建启动并等待其部署。没有任何热部署。 还是我做错了?请为我指明正确的方向,我无所不知。

7
如何获得工件的依赖树?
dependency:tree可用于查看给定项目的依赖关系树。但是我需要的是查看第三者工件的依赖关系树。 我想我可以创建一个空项目,但是我正在寻找更简单的方法(我需要针对多个工件进行此操作)。

4
用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。双击第一个罐子时出现错误: Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit. 当我双击jar-with-dependencies.jar时,出现一个略有不同的错误: Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar 我复制并粘贴了路径和类名,并检查了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 …

2
我可以将src /中的所有.cpp文件编译为obj /中的.o,然后链接到./中的二进制文件吗?
我的项目目录如下所示: /project Makefile main /src main.cpp foo.cpp foo.h bar.cpp bar.h /obj main.o foo.o bar.o 我希望makefile可以将.cpp文件/src夹中的所有文件编译为文件夹.o中的/obj文件,然后将所有.o文件链接/obj到顶级文件夹中的输出二进制文件中/project。 我几乎没有使用Makefile的经验,也不确定要搜索什么来完成此操作。 另外,这是执行此操作的“好方法”,还是我要尝试执行的更标准的方法?


10
程序在编译过程中可以依赖库,但运行时不依赖库吗?
我了解运行时和编译时之间的区别以及如何区分两者,但是我只是看不到需要区分编译时和运行时依赖项。 我正在cho的是:程序如何在运行时不依赖于编译期间依赖的东西?如果我的Java应用程序使用log4j,则它需要log4j.jar文件才能进行编译(我的代码与log4j集成并从其中调用成员方法)以及运行时(我的代码绝对无法控制log4j内的代码一旦发生了什么.jar已运行)。 我正在阅读诸如Ivy和Maven之类的依赖项解析工具,这些工具显然可以区分这两种类型的依赖项。我只是不明白它的需要。 任何人都可以给出一个简单的“国王的英语”类型的解释,最好给出一个实际的例子,即使像我这样的可怜的树液也能理解?

8
如何使用Maven将所有必需的JAR文件放入最终JAR文件中的库文件夹中?
我在独立应用程序中使用Maven,并且要将所有依赖项打包到库文件夹中的JAR文件中,如此处的答案之一所述: 如何使用Maven创建具有依赖项的可执行JAR? 我希望最终的JAR文件具有一个库文件夹,其中包含作为JAR文件的依赖项,而不是像maven-shade-plugin将.m2文件夹中的Maven层次结构那样的依赖项以文件夹形式放置的依赖项。 好吧,实际上当前的配置可以实现我想要的功能,但是在运行应用程序时加载JAR文件时遇到了问题。我无法加载课程。 这是我的配置: <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/classes/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.myapp.MainClass</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> …

2
Xcode变量
在Xcode中,我知道您可以获得PROJECT_DIR在某些情况下使用的变量,例如在运行脚本构建阶段。我想知道是否有可能获得构建类型(即Release或Debug)。有任何想法吗?

18
“构建服务器”的意义是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我没有在大型组织工作过,也从未在拥有“构建服务器”的公司工作过。 他们的目的是什么?开发人员为什么不在本地计算机上构建项目呢?是否有一些项目如此之大,以至于需要更强大的机器来在合理的时间内构建它? 我看到构建服务器有用的唯一地方是与构建服务器的持续集成,不断构建提交给存储库的内容。我只是还没有从事足够大的项目吗? 有人,请启发我:构建服务器的目的是什么?

10
Maven:如何将jar(JR实例中没有的jar)包含到J2EE项目中?
在我的J2EE项目中,我有几个依赖关系,在任何Maven存储库中都不可用,因为它们是专有库。这些库需要在运行时可用,因此必须将其复制到target /.../ WEB-INF / lib ... 现在,我在POM中将它们列为系统依赖项,但是使用这种方法的问题是,在编译过程中没有将它们复制到目标版本中。而且这种方法也不是很优雅。 那么将它们集成到Maven中的最佳方法是什么? 注意:我不想创建自己的Maven存储库。

30
为什么Maven的表现这么差?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 互联网上有很多关于Maven不好的话题。几年来,我一直在使用Maven的某些功能,我认为最重要的好处是依赖管理。 Maven文档还不够用,但是通常当我需要完成某件事时,我先弄清楚它然后再起作用(例如,当我实现对jar的签名时)。我不认为Maven很棒,但是它确实解决了一些问题,没有这些问题将是真正的痛苦。 那么,为什么Maven的表现如此差劲,我将来会遇到Maven哪些问题?也许还有我不知道的更好的选择?(例如,我从未详细研究过常春藤。) 注意:这不是尝试引起参数。这是清除FUD的尝试。




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.