到目前为止,我找到了两种使用maven3运行程序的方法:
$ mvn exec:exec -Dexec.args='...'
$ mvn assembly:assembly && java -cp all-with-dependecies.jar example.Main ...
前者使用mvn的JVM来捕获异常并且启动非常慢。后者也很慢,因为它必须构建一个大罐并运行测试。
我喜欢$ mvn compile && java -cp $CLASSPATH example.Main
。由于通常CLASSPATH
在运行之间是恒定的,我只需要担心它一次。
我的问题是你如何在开发周期变化,编译,测试中加快编译?
答案 0 :(得分:3)
您可以尝试Maven Shell。模糊说:
“Maven Shell是Maven的CLI界面,可以实现更快的周转,以及与存储库和项目的更多智能交互。使用Maven Shell,您将能够加快构建速度,因为项目信息和Maven插件被加载到一个总是就绪的JVM实例中,该实例可以执行Maven构建。“
答案 1 :(得分:2)
不经常使用mvn命令行,而是使用像 Eclipse 这样的IDE来快速测试增量更改。
Eclipse逐步构建,即它只构建更改,因此速度更快。
答案 2 :(得分:2)
您可以使用Maven Dependency Plugin构建类路径,然后重复使用它:
$ mvn dependency:build-classpath -Dmdep.outputFile=cp.txt
$ export CLASSPATH=target/classes:`cat cp.txt`
...
$ mvn compile && java -cp $CLASSPATH example.Main
答案 3 :(得分:0)
您可以通过以下选项跳过测试:-Dmaven.test.skip=true
。
为什么你认为启动一个新的JVM比在Maven的JVM中运行程序要快?它更可能恰恰相反。
编辑:另一种加快开发周期的简单方法:使用--offline
选项,除非您更改依赖项。
答案 4 :(得分:0)
我最后一次创建命令行工具时,我使用依赖插件将所有依赖项jar复制到目录(例如target / dist / lib),在Manifest文件中配置了classpath和main类(Maven Jar插件) 。然后我可以用:
执行应用程序java -jar myJar.jar
答案 5 :(得分:0)
Eclipse之外的另一个选择是使用JRebel,这将有效地热交换您的代码,这样您就可以保持程序一直运行。
不幸的是JRebel除非你的开源或使用Scala,否则不是免费的。
如果您使用Eclipse(或IntelliJ)并在调试模式下运行程序,您也可以热插拔代码,但不能添加或删除方法。
如果您想立即获得反馈,我发现这两种方法在Java环境中效率最高。
最后一个选项是配置Maven to use the Eclipse compiler,它比openjdk编译器更快(假设)。
答案 6 :(得分:0)
如果您需要实现命令行工具,请查看maven appassembler plugi n,这在这种情况下非常有用。与maven-assembly有关,您可以创建一个.tar.gz / zip存档,可以解压缩并启动应用程序。
答案 7 :(得分:0)
为所有构建时依赖项创建单个模块(注释,嵌入式tomcat,代码生成器等。构建一次并附加到编译器插件,使它们位于所有模块的构建路径上
创建一个小的共享配置并在构建时在每个模块中解压缩(检查样式配置,记录配置等)
将maven插件放入他们自己的个人配置文件中,可根据需要及时引入。例如检查样式,findbugs,JavaDoc,surefire,故障安全,代码签名等。您的正常构建应该使用尽可能少的插件。这确实有助于排除故障,因为任何插件都可以使用-P命令行选项单独启用
避免编译器插件上的fork配置,它可以使你的构建时间加倍。如果你需要-parameters,那么只需要为需要它的类分叉一次。
编写测试以便它们可以并行运行。没有测试应该花费超过一秒钟。
使用-T 1C选项并行构建
使用嵌入式版本的tomcat而不是tomcat插件来启动tomcat进行集成测试。避免多次启动tomcat。
排除任何不需要在tomcat配置属性中扫描的jar。
将您的项目构建为在其父pom下的平衡树分组相关组件。
最重要的是您的BOM POM模块,共享资源模块,共享构建路径模块。一旦你把所有事情都组织起来,你很少建立这些。
接下来是您的热门应用pom,其中包含以下父母poms
- 没有依赖关系的低级别模块。
-Gateway模块,包括http客户端库和接口模块。
-Biz服务模块
-Containers - tomcat,Spring,DropWizzard等。
-Packages - ubber jars,zips
-Runtimes - Rpms,可执行的jar
Poms依赖项应始终指向更高级别的poms以避免循环依赖
较慢的构建工件应该是最后的,这样您就可以在不必等待慢速打包的情况下工作。
你应该能够在大约5秒钟内构建任何组,在5秒内构建你的战争,在10秒内用弹簧启动tomcat,最糟糕的情况是20秒迭代。
maven编译器是快速且增量的,因此尽量避免生成任何强制重新编译的代码
为您的测试创建一个小型DSL和解释器。我们已经看到这种方法的运行速度是junit的两倍。
我只是使用这些技术将我们的大型完整版本从5分钟到45秒。这是很多工程,但值得。这种方法适用于标准maven发布插件,使故障排除更加容易。
祝你好运。 它永远不够快PS PCIe SSD也是一个很大的帮助