高度自定义maven配置

乌龟壳 发布于 2017/05/16 14:46
阅读 430
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

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

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

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

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

谢谢

以下是问题补充:

@乌龟壳:这些在Ant里实现起来都很简单,只是Ant流行度在下降,对新加入团队的人不友好。 (2017/05/16 14:47)
@乌龟壳:更正一下,我说的接受重写,是说就算没用工具把ant转成maven,自己重头一行一行把maven配置出来也是可以接受的。不是重写项目。build是build,和项目相对来说是独立的。 (2017/05/16 20:51)
加载中
0
南湖船老大
南湖船老大

感觉你根本没理解什么是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,轻轻松松毫无障碍。

乌龟壳
乌龟壳
无论js minify还是jsp编译成class,我都是举例子而已,真正想问的是mvn对编译流程的支持,除了写插件还有哪些?当然你说mvn可以嵌入ant,那我现在ant一套流程都下来了,只是没有mvn那么多功能,感觉没必要换。
乌龟壳
乌龟壳
你刻意没谈jsp编译成class,证明你不熟,你熟悉js minify,所以给了个插件的例子。我可不可以理解成mvn自定义编译流程必须学怎么写mvn插件?没法像Ant一样把编译流程也可以xml脚本化?
乌龟壳
乌龟壳
先不看具体内容,补充一下,我说的重写是重写build不是项目,现在项目用ivy管理依赖,并非放到lib什么的
0
ManderSF
ManderSF
该评论暂时无法显示,详情咨询 QQ 群:点此入群
乌龟壳
乌龟壳
该评论暂时无法显示,详情咨询 QQ 群:点此入群
ManderSF
ManderSF
回复 @乌龟壳 : 可以接受完全重写的话 完全可以采取前后端分离来做 就没这些问题了
ManderSF
ManderSF
回复 @乌龟壳 : 我个人觉着差别还是很大的 重启服务的成本 以及风险明显比那个高很多
乌龟壳
乌龟壳
该评论暂时无法显示,详情咨询 QQ 群:点此入群
乌龟壳
乌龟壳
该评论暂时无法显示,详情咨询 QQ 群:点此入群
下一页
0
52iSilence7
52iSilence7

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

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

@南湖船老大

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

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

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

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

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

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

0
南湖船老大
南湖船老大

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

@南湖船老大

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

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

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

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

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

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

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

0
乌龟壳
乌龟壳

@南湖船老大

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

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

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

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

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

谢谢。

乌龟壳
乌龟壳
回复 @南湖船老大 : 好的
南湖船老大
南湖船老大
回复 @乌龟壳 : nexus,jfrog都可以的,都有web界面,很方便管理(主要是配置权限和代理仓库地址)。一次配置后后面就不用再管了
乌龟壳
乌龟壳
回复 @南湖船老大 : 就是你说的私有repo啊,mvn私源,公司内项目间共享的源,不能开放出去的
南湖船老大
南湖船老大
回复 @乌龟壳 : 不太理解你这个需求是什么
乌龟壳
乌龟壳
@南湖船老大 对了,你知不知道maven是否有只需要http/ftp和文件目录结构就能部署出来的repo,我不需要web界面去管理,手工即可。
下一页
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部