高度自定义maven配置:报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

高度自定义maven配置:报错

kun坤 2020-06-07 09:27:19 41

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

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

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

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

谢谢

数据可视化 Java 应用服务中间件 Maven
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-08 11:18:06

    感觉你根本没理解什么是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什么的######

    要使用Maven最好还是搭建一个Nexus   这样也是为了长远考虑 当然增加dependency的时候也容易些  jsp编译class 这个问题  我感觉你对于JSP 以及 Servlet的生命周期理解的有问题  Maven管理子模块什么的  还是很方便的吧  无非就是多加一些 

    ######回复 @ManderSY : 我只是拿jsp做个例子而已,而且你这样回答算是逃避问题。如果你改的不是jsp而是controller呢?重启项目发布这个问题我不太想发散开来讨论。总之就是有办法自动化实现平滑重启发布。如果你纠结jsp,那我说个别的方便你理解,发布前要把js minify,请问用mvn怎么做?######回复 @乌龟壳 : 可以接受完全重写的话 完全可以采取前后端分离来做 就没这些问题了######回复 @乌龟壳 : 我个人觉着差别还是很大的 重启服务的成本 以及风险明显比那个高很多######回复 @ManderSY : 而且我只是拿jsp举例方便理解而已。项目的模板引擎不是jsp,而且要打包js那些东西,要干的事情很多。######回复 @ManderSY : 对于一个上线要走流程的环境,预编译jsp只能说影响不大。######

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

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

    @南湖船老大

    ######

    @南湖船老大

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

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

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

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

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

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

    ######

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

    @南湖船老大

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

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

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

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

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

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

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

    ######

    @南湖船老大

    通过你的举例,我特意看了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界面去管理,手工即可。
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题