现在项目是Ant管理的,要将其改成Maven,不需要自动化,可以接受完全重写。但是有几个问题稍微看了下文档,不得门而入。求指点(并非求完整解决方案,只是想得到点提示)。
自定义build逻辑,比如先把jsp编译成class再打包成jar,而不是直接发布jsp文件,由tomcat当场编译。
自定义目录结构,因为是一个比较大的项目且很多模块,但是共同一套配置文件目录结构等。
最简单的私有Maven repo要如何搭建(期望是按照某个目录结构向外发布http/ftp访问即可,不需要web端去可视化管理)
谢谢
感觉你根本没理解什么是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界面去管理,手工即可。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。