1.痛点
feilong-spring 项目子项目很多
使用 Maven依赖的话,要写很多代码
<project>
....
<properties>
<version.feilong-platform>1.9.6</version.feilong-platform>
....
</properties>
....
<repositories>
<repository>
<id>feilong-repository</id>
<url>https://raw.github.com/venusdrogon/feilong-platform/repository</url>
</repository>
</repositories>
....
<dependencies>
....
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-core</artifactId>
<version>${version.feilong-platform}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-aop</artifactId>
<version>${version.feilong-platform}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-context</artifactId>
<version>${version.feilong-platform}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-jdbc</artifactId>
<version>${version.feilong-platform}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-web</artifactId>
<version>${version.feilong-platform}</version>
</dependency>
....
</dependencies>
....
</project>
能否做个 all-in-one 的jar(such as quartz-all,netty-all) ,只需要依赖这一个jar 即可?
2.解决方案
2.1 方案1:将所有的项目合并成一个项目
调整项目结构,类似于 feilong taglib issues1 ,但是 feilong-spring 不适合 ,文件太杂,维护起来很困难
2.2 方案2:使用 maven-antrun-plugin 插件
在我百思不得其解的时候,想起"咦,别人是怎么做的?",此时 github 开源的力量是无穷的,我查阅了quartz-all
他使用了 maven-antrun-plugin 插件, 我借鉴并修改成以下一版 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>parent</artifactId>
<version>1.10.0-SNAPSHOT</version>
</parent>
<artifactId>feilong-spring-all</artifactId>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>packing-all</id>
<phase>process-sources</phase>
<configuration>
<tasks>
<copy todir="${project.build.directory}/classes">
<fileset dir="${basedir}/../feilong-spring-aop/target/classes" />
<fileset dir="${basedir}/../feilong-spring-context/target/classes" />
<fileset dir="${basedir}/../feilong-spring-core/target/classes" />
<fileset dir="${basedir}/../feilong-spring-jdbc/target/classes" />
<fileset dir="${basedir}/../feilong-spring-mobile/target/classes" />
<fileset dir="${basedir}/../feilong-spring-web/target/classes" />
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2.2.1 依赖结果
随便找个项目,依赖下测试
<dependencies>
...
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-all</artifactId>
<version>1.10.0-SNAPSHOT</version>
</dependency>
...
</dependencies>
显示:
2.2.2 缺点:
没有source 以及 test 包
不利于查看javadoc 以及学习
2.3 方案3: 使用 maven-assembly-plugin插件
那么我们继续寻找其他方案, 咦,发现 shiro-all 在仓库中有 pom.xml
他是怎么做到的呢?
查看下他的源码 , 可以看到他使用了 maven-assembly-plugin 插件
pom.xml
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-bundles</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<!---->
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
<!-- We _do_ want the assembly output to be the actual artifact produced for this Maven module. -->
<!-- not append assembly id in release file name -->
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>jar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>true</unpack>
<useTransitiveDependencies>false</useTransitiveDependencies>
</dependencySet>
</dependencySets>
</assembly>
2.3.1 缺点:
依赖 feilong-spring-all
jar, 项目还会自动依赖 feilong-spring-all
所依赖的jar
shiro-all 1.4.0-RC2 写法也一样不行
重复依赖很明显
2.4 方案4: 使用 maven-shade-plugin 插件
shiro-all 1.3.2
支持 sources
并且依赖之后,没有明显的重复依赖 (This is what i want what i really really want)
shiro-all 1.3.2 系列使用的maven-shade-plugin 插件
2.4.1 feilong-spring-all 配置
feilong-spring-all
pom.xml
配置如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>parent</artifactId>
<version>1.10.0-SNAPSHOT</version>
</parent>
<artifactId>feilong-spring-all</artifactId>
<packaging>jar</packaging>
<properties>
<v.maven-shade-plugin>2.4.3</v.maven-shade-plugin>
</properties>
<dependencies>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-aop</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-context</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-jdbc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-mobile</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.feilong.platform.spring</groupId>
<artifactId>feilong-spring-web</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${v.maven-shade-plugin}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- With version 2.2 of the maven-shade-plugin, they added a "shadeTestJar" option (see MSHADE-158): http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#shadeTestJar -->
<shadeTestJar>true</shadeTestJar>
<!-- When true, it will attempt to create a sources jar as well -->
<createSourcesJar>true</createSourcesJar>
<artifactSet>
<includes>
<include>${project.groupId}:*:*</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
配置方式中增加了两个属性参数:
- shadeTestJar
- createSourcesJar When true, it will attempt to create a sources jar as well
2.4.2 feilong-spring-all deploy之后的情况
可以看到 pom.xml ,jar,sources jar,tests jar 一应齐全,棒棒哒
2.4.3 feilong-spring-all 被依赖情况
很完美,做到了只依赖feilong-spring-all
,并且不再依赖 feilong-spring-all
自身依赖的jar
搞定,收工~~
3.参考
- maven-assembly-plugin 插件
- maven-antrun-plugin 插件
- maven-shade-plugin 插件
- http://stackoverflow.com/questions/5149130/how-can-i-configure-the-maven-shade-plugin-to-include-test-code-in-my-jar
----完
相关推荐
标题中的“【飞天奔月出品】windows版nginx 快速操控神器(启动start,关闭stop,重启restart) 批处理”指的是一个专为Windows操作系统设计的Nginx管理工具,它通过批处理脚本实现了Nginx服务的便捷启动、停止和重启...
CSS3的新特性,如渐变、阴影、过渡和动画,可以实现游戏中的视觉特效,比如兔子跳跃、月饼旋转等动态效果。 再者,JavaScript是实现网页动态行为的关键,它赋予网页交互性。在这个案例中,JavaScript可能会包含游戏...
游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小...
在这个例子中,文件名"jquery-game"可能意味着游戏的实现依赖于jQuery,这是一个广泛使用的JavaScript库,提供了便利的API用于操作DOM、处理事件和执行动画效果。 总的来说,"HTML5奔月游戏"展示了HTML5在游戏开发...
"rar"格式是一种常见的压缩文件格式,用于存储多个相关文件在一个包内,便于传输和保存。 【标签】"源码" 表示这个资源的核心价值在于其代码内容。源码是程序的原始编写形式,可以被程序员修改、调试和扩展。对于...
`<audio>`和`<video>`标签则方便了音频和视频的嵌入,为游戏增加了音效和背景音乐。此外,`Web Storage`和`IndexedDB`允许游戏数据本地存储,即使在离线状态下也能继续游戏进度。 在火箭兔奔月这个游戏源码中,我们...
文件“使用须知.txt”可能是提供关于如何运行和修改游戏的说明,包括如何在本地环境部署、如何查看和编辑源代码,以及可能的注意事项和版权信息。而“132692081374528955”这个文件名看起来像是一个随机生成的数字或...
《奔月》是鲁迅先生的一篇短篇小说,收录于其《故事新编》之中,通过对传统神话的再创作,鲁迅以戏拟的手法揭示了深刻的社会与人性问题。这篇作品通过对后羿这一昔日英雄形象的塑造,反映出鲁迅对时代变迁下英雄命运...
《H5游戏源码解析:奔月游戏》 在当今数字化时代,HTML5(简称H5)技术以其跨平台、轻量级、易部署的特点,成为制作网页游戏的热门选择。"奔月游戏"作为一款H5游戏,其源码为我们提供了一窥H5游戏开发的窗口。本文...
【长娥奔月模板下载TIF】是一个与网页设计相关的资源,主要提供了一种以"长娥奔月"为主题的网页模版。这个模版可能是为了庆祝中国传统节日,如中秋节,或者用于讲述中国古老的神话故事。"长娥奔月"是中国文化中的...
奔月生物:2021年半年度报告.PDF
这篇文档介绍了如何使用Adobe Photoshop软件创作一张奔月女孩的梦幻艺术照片效果。以下是详细步骤: 1. **新建文件与导入素材**: - 首先创建一个新文件,大小与素材1相同,命名为"奔月女孩"。 - 然后打开素材1,...
通过深入研究这些源代码,学习者可以了解H5游戏开发的基本流程,如使用canvas画布进行绘图,利用requestAnimationFrame实现平滑动画,运用事件监听器响应用户操作,以及如何组织和优化代码以提高性能。同时,还可以...
游戏中的“兔子奔月”可能涉及到物理模拟,例如重力和速度的计算,使得兔子的动作更加真实。而“吃月饼”的交互设计则可能运用到碰撞检测算法,当兔子与月饼的位置满足特定条件时,触发得分增加或者月饼消失的事件。...
在这个游戏中,JavaScript用于处理用户输入,控制兔子的移动、跳跃,以及检测月饼的位置和碰撞,实现游戏逻辑。同时,JavaScript还可以用来实现分数计算和计时器功能,使游戏更具有挑战性。 CSS(层叠样式表)在...
【标题】:“奔月生物:2021年半年度报告.rar”是一个压缩文件,其中包含了一份关于奔月生物科技公司在2021年上半年业务运营、财务状况和业绩表现的详细报告。这类报告通常由上市公司发布,以供投资者、分析师和其他...
在奔月游戏中,可能使用canvas来绘制角色、背景、轨迹等元素,并通过定时更新画面来实现动画效果。 2. **Web Audio API**:HTML5提供了Web Audio API,用于处理和播放音频。游戏往往需要背景音乐和音效,这个API...
此外,JavaScript还可以实现计时器功能,确保游戏的帧率和时间管理。 3. **Web Audio API**: 音效是游戏体验的重要组成部分。HTML5的Web Audio API提供了一种在网页中播放和处理音频的方法。游戏可能包含各种音效,...