高度自定义maven配置

发布于 2021-12-01 08:06:30 字数 293 浏览 703 评论 17

现在项目是Ant管理的,要将其改成Maven,不需要自动化,可以接受完全重写。但是有几个问题稍微看了下文档,不得门而入。求指点(并非求完整解决方案,只是想得到点提示)。

自定义build逻辑,比如先把jsp编译成class再打包成jar,而不是直接发布jsp文件,由tomcat当场编译。

自定义目录结构,因为是一个比较大的项目且很多模块,但是共同一套配置文件目录结构等。

最简单的私有Maven repo要如何搭建(期望是按照某个目录结构向外发布http/ftp访问即可,不需要web端去可视化管理)

谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

岁月打碎记忆 2021-12-05 11:25:34

@南湖船老大 对了,你知不知道maven是否有只需要http/ftp和文件目录结构就能部署出来的repo,我不需要web界面去管理,手工即可。

你曾走过我的故事 2021-12-05 11:24:28

回复
@乌龟壳 : 不太理解你这个需求是什么

女中豪杰 2021-12-05 11:21:28

回复
@南湖船老大 : 就是你说的私有repo啊,mvn私源,公司内项目间共享的源,不能开放出去的

离去的眼神 2021-12-05 11:11:53

回复
@乌龟壳 : nexus,jfrog都可以的,都有web界面,很方便管理(主要是配置权限和代理仓库地址)。一次配置后后面就不用再管了

风苍溪 2021-12-05 11:09:27

回复
@南湖船老大 : 好的

德意的啸 2021-12-05 11:04:45

@南湖船老大

通过你的举例,我特意看了mvn的plugin开发的文档,发现maven对自己的定义是

"Maven" is really just a core framework for a collection of Maven Plugins.

所以我想难怪各种自定义逻辑的工具在mvn文档里找不到,原来本来就是要开发的。

看来要考虑下是否值得把Ant那套编译逻辑用mvn插件的方式重构出来,这样就能用上mvn了。

说真的Ant和Ivy太老了,很多东西实现得不好,不知道maven怎样。

谢谢。

初见你 2021-12-05 10:55:49

引用来自“乌龟壳”的评论

@南湖船老大

我想再明确地说一下场景,不是具体的jsp编译成class什么的,比如我手头上有一个自己开发的模板引擎,我需要

第一步把模板引擎编译出来

第二步用这个编译出来的模板引擎编译*.tmpl文件成java

第三步把java编译成class打包成jar

第四部把jar放到最终的目录

我想咨询的是,类似这些需要自定义化的逻辑,mvn大概是怎样支持的,我只需要一些关键字就好了。比如mvn是否支持直接调用jar,是否可以像ant一样配置一些简单的逻辑等。

当然不是问题啦,maven是Java写的,当然有插件机制啦。写个maven插件又不复杂,套路都在那了

夜司空 2021-12-05 10:46:03

@南湖船老大

我想再明确地说一下场景,不是具体的jsp编译成class什么的,比如我手头上有一个自己开发的模板引擎,我需要

第一步把模板引擎编译出来

第二步用这个编译出来的模板引擎编译*.tmpl文件成java

第三步把java编译成class打包成jar

第四部把jar放到最终的目录

我想咨询的是,类似这些需要自定义化的逻辑,mvn大概是怎样支持的,我只需要一些关键字就好了。比如mvn是否支持直接调用jar,是否可以像ant一样配置一些简单的逻辑等。

绝情姑娘 2021-12-05 10:07:53

它的标准要遵守可以,但始终问题要解决,预编译jsp只是我抽象出来方便大家理解的场景而已,实际要做的是真正不预编译跑不起来的功能。

眼眸里的那抹悲凉 2021-12-05 09:41:53

maven的哲学是Convention over Configuration ,建议还是按照maven的标准来,不然还不如就继续用ant,这样的成本还低一些

柒夜笙歌凉 2021-12-05 07:19:49

回复
@乌龟壳 : 我个人觉着差别还是很大的 重启服务的成本 以及风险明显比那个高很多

情场扛把子 2021-12-05 02:54:09

回复
@乌龟壳 : 可以接受完全重写的话 完全可以采取前后端分离来做 就没这些问题了

梦里兽 2021-12-04 18:47:29

先不看具体内容,补充一下,我说的重写是重写build不是项目,现在项目用ivy管理依赖,并非放到lib什么的

甜扑 2021-12-03 16:30:30

你刻意没谈jsp编译成class,证明你不熟,你熟悉js minify,所以给了个插件的例子。我可不可以理解成mvn自定义编译流程必须学怎么写mvn插件?没法像Ant一样把编译流程也可以xml脚本化?

猫九 2021-12-02 19:55:45

无论js minify还是jsp编译成class,我都是举例子而已,真正想问的是mvn对编译流程的支持,除了写插件还有哪些?当然你说mvn可以嵌入ant,那我现在ant一套流程都下来了,只是没有mvn那么多功能,感觉没必要换。

成熟的代价 2021-12-02 02:33:34

感觉你根本没理解什么是maven。。。我使用中根本没遇到你提到的疑问

jsp编译class是什么鬼。。没看懂,JSP不需要什么编译,这是容器的事情。。就算是你编译好了,你也脱离不了servlet容器,没多大意义。

至于你说的,发布前要把js minify,请问用mvn怎么做?

这根本就不叫事儿。maven搭配NPM和最热的vue前端框架整合在一起搞事,也不算啥事。Java开发的系统和工具,如果连这点扩展性都不到,还配叫Java么,Java还配稳坐编程语言老大的位置么。。你说的东西maven当然支持啦!,看示例配置:

<!-- yuicompressor -->  
            <plugin>  
                <groupId>net.alchim31.maven</groupId>  
                <artifactId>yuicompressor-maven-plugin</artifactId>  
                <version>1.3.0</version>  
                <executions>  
                    <execution>  
                        <phase>package</phase>  
                        <goals>  
                            <goal>compress</goal>  
                        </goals>  
                        <configuration>
                           <includes>  
                    <include>js/*.js</include>  
                    <include>css/*.css</include>  
                    <include>activity/**/*.css</include>  
                        </includes>
                            <excludes>  
                                <exclude>**/*.min.js</exclude>  
                                <exclude>**/*-min.js</exclude>  
                            </excludes>  
                            <encoding>utf8</encoding>  
                            <failOnWarning>false</failOnWarning>  
                            <nosuffix>true</nosuffix>  
                            <force>true</force>  
                            <removeIncluded>true</removeIncluded>  
                            <linebreakpos>-1</linebreakpos>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin>  

ant转maven不是分分钟的事情么,这种事情我干的不少,传统的没有任何包管理的全扔lib下的项目,200多个jar,我一天时间就能搞定。maven和某个号称最好的语言的包管理不同,maven对代码没有任何侵入性,代码一行改动都不需要,唯一需要的就是目录结构做轻微调整(甚至不调整也可以)。不存在你说的什么“重写”,真正的0侵入,反正就是不涉及任何代码修改,只需要配置下maven的POM而已。

maven本来就支持自定义目录结构啥的,只不过约定在先,你要不按你约定来也可以啊。

<build>  
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>  
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>  
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>  
    <outputDirectory>${basedir}/target/classes</outputDirectory>  
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>  
    ...  
  </build>  

如果系统中有很多jar已经招不到maven坐标了,自己给它安一个坐标,上传到私服就能搞定。我在12年之前写的Java代码都是传统方式,没有任何依赖管理。12年后,老项目转maven,轻轻松松毫无障碍。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文