[转]maven与java命名规则

 

MAVEN 与 JAVA 包命名规范

 

抛出问题

 

在使用MAVEN搭建模块化项目时,我的组织结构如下:

 

  1. root模块

文件夹名:package-module-project

 

pom.xml文件:

 

<project><groupId>com.chuillusion</groupId><artifactId>chuillusion-package</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><modules><module>chuillusionCore</module><module>chuillusionBrowser</module><module>chuillusionApp</module><module>chuillusionDemo</module></modules>
</project>

 

  1. 子模块

2.1 核心模块
文件夹名:chuillusionCore

 

pom.xml文件:

 

<project><parent><artifactId>chuillusion-package</artifactId><groupId>com.chuillusion</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>chuillusion.core</artifactId>
</project>

 

Java包命名:com.chuillusion.cores为根包

 

存在问题

 

  1. 项目文件夹命名与maven中artifactId不一致

root模块项目命名为package-module-project,root所对应的artifactId命名为chuillusion-package

 

  1. java包命名与maven不一致

核心模块中java根包命名为:com.chuillusion.cores,核心项目中artifactId命名为chuillusion.core

 

  1. idea显示不一致

当项目名称与artifactId不一致时,idea则会在项目名则展示artifactId

 

如:chuillusionCore[chuillusion.core] ,即:项目名[artifactId]

 

命名规则探讨

 

  1. 官网说明

参考MAVEN官方文档中的命名规范

Guide to naming conventions on groupId, artifactId and version

  1. groupId will identify your project uniquely across all projects, so we need to enforce a naming schema. It has to follow the package name rules, what means that has to be at least as a domain name you control, and you can create as many subgroups as you want. Look at

    More information about package names.

    eg. org.apache.maven, org.apache.commons

    A good way to determine the granularity of the groupId is to use the project structure. That is, if the current project is a multiple module project, it should append a new identifier to the parent’s groupId.

    eg. org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting

  2. artifactId is the name of the jar without version. If you created it then you can choose whatever name you want with lowercase letters and no strange symbols. If it’s a third party jar you have to take the name of the jar as it’s distributed.

    eg. maven, commons-math

  3. version if you distribute it then you can choose any typical version with numbers and dots (1.0, 1.1, 1.0.1, …). Don’t use dates as they are usually associated with SNAPSHOT (nightly) builds. If it’s a third party artifact, you have to use their version number whatever it is, and as strange as it can look.

    eg. 2.0, 2.0.1, 1.3.1

 

  1. 以驱动包案例分析
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.43</version>
</dependency>

 

生成的包名称为:mysql:mysql-connector-java-5.1.43.jar,即为groupId:artifactId-version.jar

 

源码结构:com.mysql作为项目根包

 

疑问:个人感觉是没有按照规范进行命名的

 

  1. assertj分析
<dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId><version>3.8.0</version>
</dependency>

 

源码结构:org.assertj.core作为根包

 

  1. logback分析
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.3.0-alpha3</version><scope>test</scope>
</dependency>

 

源码结构:ch.qos.logback.classic作为根包

 

  1. 结论

1)源码包中需要有groupId开头,紧接artifactId作为根包

 

规范命名

 

养成良好的编码习惯,从命名规范做起

 

修改项目命名

 

项目名与artifactId相对应,源码目录与整体结构对应

 

  1. root模块

项目名称:package-module-project

 

<project><groupId>com.chuillusion</groupId><artifactId>package-module-project</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><modules><module>chuillusion-core</module><module>chuillusion-browser</module><module>chuillusion-app</module><module>chuillusion-demo</module></modules>
</project>

 

root项目为空结构,只有一个pom文件负责管理子模块,因此没有源码目录结构

 

  1. 核心模块修改

修改方式一:

 

项目名称:chuillusion-core

 

<project><parent><artifactId>package-module-project</artifactId><groupId>com.chuillusion</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>chuillusion-core</artifactId>
</project>

 

源码根目录结构:com.chuillusion.core

 

修改方式二

 

项目名称:core

 

<project><parent><artifactId>package-module-project</artifactId><groupId>com.chuillusion</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>core</artifactId>
</project>

 

源码根目录结构:com.chuillusion.core

 

说明

 

写这篇文章是因为1)项目中遇到的问题;2)在baidu上没有相关文章

 

欢迎各位留言指正文章的错误,谢谢!


---------------------
作者:楚丶迷梦
来源:CSDN
原文:https://blog.csdn.net/sinat_30254575/article/details/79735051
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么 Istio 要使用 SPIRE 做身份认证?

今年 6 月初&#xff0c;Istio 1.14 发布 [1] &#xff0c;该版本中最值得关注的特性是新增对 SPIRE 的支持。SPIFFE[2] 和 SPIRE 都是 CNCF 孵化项目&#xff0c;其中 SPIRE 是 SPIFFE 的实现之一。本文将带你了解 SPIRE 对于零信任架构的意义&#xff0c;以及 Istio 是为何使…

C语言试题106之有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1、题目 题目:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:兔子的规律为数列 1,1,2,3,5,8,13,21… 2 、温馨提示 想获取更多C语言题目请猛搓这里==========》200个C语言…

显式强制类型转换

1. 日期显式转换为数字new Date; //1478845373322javascript有个奇特的语法&#xff0c;即构造函数没有参数时可以不用带()。不过最好还是使用ES5中新加入的静态方法&#xff1a;Date.now()。2. ~运算符按位运算符只适用于32位整数&#xff0c;运算符会强制操作数使用32位格式。…

【ArcGIS风暴】ArcGIS Editor for OSM中文教程(2):下载及加载OSM数据

本文讲解在ArcGIS中借助OpenStreetMap工具下载并加载OSM数据。 文章目录 1. 下载OSM数据2. 加载OSM数据1. 下载OSM数据 在工具箱中双击Download OSM Data(XAPI)工具。 Download URL:http://www.overpass-api.de/api/xapi_meta? Downlaod Extent:与图层lanzhou相同

Object.observe将不加入到ES7

先请看 Object.observe 的 API Object.observe(obj, callback[, acceptList])它用来监听对象的变化&#xff0c;当给该对象添加属性&#xff0c;修改属性时都会被依次记录下来 看一个示例 var person {} Object.observe(person, function(arr) {var change arr[0]console.log…

Kafka学习征途:.NET Core操作Kafka

【Kafka】| 总结/Edison Zhou1可用的Kafka .NET客户端作为一个.NET Developer&#xff0c;自然想要在.NET项目中集成Kafka实现发布订阅功能。那么&#xff0c;目前可用的Kafka客户端有哪些呢&#xff1f;目前.NET圈子主流使用的是 Confluent.Kafkaconfluent-kafka-dotnet : htt…

C语言试题107之判断 101至200 之间有多少个素数,并输出所有素数。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:判断 101至200 之间有多少个素数,并输出所有素数 分析:判断素数的方法:用一个数分…

C语言将十进制输出二进制、八进制、十六进制的方法总结

文章目录 方法一:直接输出方法二:itoa函数方法一:直接输出 C语言中,控制printf函数输出格式的是格式字符,printf没有直接打出2进制数的格式符,直接打出16进制的格式符是x格式符,即%x。 printf函数中输出的格式为printf("<格式化字符串>", <参量表&…

[Android] 修改ImageView的图片颜色

有两种方法&#xff1a; 方法1&#xff1a; ImageView imageView (ImageView) findViewById(R.id.arrow_image); Drawable tipsArrow imageView.getDrawable(); tipsArrow.setColorFilter(mContext.getResources().getColor(R.color.red_bg1), PorterDuf…

四叉树算法

2019独角兽企业重金招聘Python工程师标准>>> title: 四叉树算法 date: 2016-1-11 15:10 categories: IOS tags: 算法 小小程序猿我的博客&#xff1a;http://daycoding.com 转载&#xff1a;http://blog.csdn.net/zhanxinhang/article/details/6706217 高德iOS聚合…

2019年中国教育信息化行业研究报告

2019年中国教育信息化行业研究报告 教育行业丨研究报告 本文转自&#xff1a;艾瑞咨询 核心摘要&#xff1a; 教育信息化2.0时代&#xff0c;教育相关政府/学校以更开放的姿态对待社会各类业态的进入&#xff0c;共建共享优质教育资源&#xff0c;提升教育公平与教育质量。同…

C语言试题109之将一个正整数分解质因数。例如:输入 90,打印出 90=2乘3乘3乘5

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。 分析:对 n 进行分解质因…

【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装

文章目录 addin介绍addin开发方式Python Add-In开发addin下载addin安装基于ArcObject/ArcGIS Engine的Add-In开发addin介绍 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作。相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷。通过开…

dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能

我对几个应用进行严格的启动性能评估&#xff0c;对比了在 .NET Framework 和 dotnet 6 下的应用启动性能&#xff0c;非常符合预期的可以看到&#xff0c;在用户的设备上&#xff0c;经过了 NGen 之后的 .NET Framework 可以提供非常优越的启动性能&#xff0c;再加上 .NET Fr…

使用myeclipse建立maven项目(重要)

maven是管理项目的&#xff0c;myeclipse是编写代码的。第一次写项目都要配置好多东西&#xff0c;很麻烦&#xff0c;now 来看看怎样新建一个maven项目。 工具/原料 myeclipsemaven方法/步骤 因为教程使用的maven是自己下载配置的&#xff0c;并没有使用myeclipse自带的&#…

LeetCode 每日一题 Day 22 || 枚举(数学方法)/二分

1954. 收集足够苹果的最小花园周长 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标轴之一平行。 给你…

不用@微信官网了,用python给自己的微信头像加个小国旗

国旗LOGO&#xff08;png透明格式&#xff09;&#xff1a; 微信头像 合成结果&#xff1a; import base64 import os import re from io import BytesIO from PIL import Image import tkinter as tk from tkinter import filedialog# 水印图片 可以自己指定 #markImageImage…

getContentResolver().query()方法selection参数使用详解(转)

如何在managedQuery()和getContentResolver().query()方法中实现结果去重 有时候&#xff0c;我们需要对查询的数据库结果进行去重。在SQL中我们可以通过distinct关键字实现&#xff0c;但是当我们使用android提供的managedQuery()或getContentResolver().query()方法对数据库进…

C语言试题106之有一对兔子问题

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又…

【C#程序设计】教学讲义——第二章:简单C#程序设计

教学目录 2.1 面向对象的概念2.2 建立简单的应用程序2.3 窗体和Label控件2.4 文本框-属性2.5 按钮控件本章小结2.1 面向对象的概念 2.1.1 对象和类 1.对象 对象是客观世界中对象的模型化。对象是有着特殊数据(属性)与操作(行为)的实体,对象的操作(行为)称为方法。 程…