相关疑难解决方法(0)

Maven工件和groupId命名

我目前正在将一些项目从Ant迁移到Maven.循规蹈矩,因为我,我想用行之有效的约定查找groupIdartifactId,但我找不到任何详细的约定(也有一些,但不包括我想了解一下点).

以此项目为例,首先是Java包: com.mycompany.teatimer

Tea计时器实际上是两个单词,但Java包命名约定禁止插入下划线或连字符,所以我将它们全部写在一起.

我选择了groupId相同的包ID,因为我认为这是一个好主意.是吗?

最后,我必须选择一个artifactId,我目前去了teatimer.但是当我查看其他Maven项目时,他们使用连字符来分割artifactIds中的单词,如下所示:tea-timer.但是当连接到groupId:时确实看起来很奇怪com.mycompany.teatimer.tea-timer.

你会怎么做?

另一个例子:

包裹名字: com.mycompany.awesomeinhouseframework

groupId:( com.mycompany.awesomeinhouseframework?)

artifactId:( awesome-inhouse-framework?)

maven-2 naming-conventions

269
推荐指数
3
解决办法
23万
查看次数

Maven Artifacts的命名约定

我们目前正在努力对公司现有的项目进行整理.我们已经执行了POC,目前正在记录我们的学习和指导.我为maven工件提出了以下命名约定.请分享您的意见

注意:在我们公司,projectname始终是唯一的

对于单级多模块maven项目

家长(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom

模块(罐子)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.modulename
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.modulename-1.0.0.jar

对于多级多模块maven项目

家长(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname-1.0.0.pom

SubParent(pom)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.subcategory
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.subcategory-1.0.0.pom

模块(罐子)

  • groupId:org.companyname.projectname
  • artifactId:org.companyname.projectname.subcategory.modulename
  • 版本:xxx

例如:org.companyname.projectname:org.companyname.projectname.subcategory.modulename-1.0.0.jar

maven-2 naming-conventions

20
推荐指数
2
解决办法
2万
查看次数

具有显式finalName的Maven将无法正常工作

1.背景

我的Maven项目有很多的模块和子模块与jarswars一切工作.我也可以在服务器上部署它而没有任何问题.

我决定遵循这个maven命名转换,我正在进行一些测试project.nameproject.build.finalName拥有一个合适的名称.

我定义project.name为根工件创建的模式是company-${project.artifactId},对于模块和子模块是${project.parent.name}-${project.artifactId}:

  • 公司的任何伪影的任何-模块1
  • 公司的任何伪影的任何-模块2-任何-submodule1
  • 公司的任何伪影的任何-模块2-任何-submodule2

模式project.build.finalName${project.name}-${project.version}:

  • 公司的任何伪影的任何-module1-1.0.jar
  • 公司的任何伪影的任何-模块2-任何-submodule1-2.0.jar
  • 公司的任何伪影的任何-模块2-任何-submodule2-3.0.war

但maven没有生成这些文件,而是给了我一个StackOverflowError.

2.重现错误的示例

你可以从github克隆这个例子:https://github.com/pauloleitemoreira/company-any-artifact

在github中,有一个master分支,它将重现此错误.还有only-modules分支,这是一个工作示例,用于${project.parent.name}生成finalName我想要的jar .

让我们考虑一个带有一个根pom工件,一个pom模块和一个子模块的maven项目.

-any-artifact
     |
     |-any-module      
           |
           |-any-submodule
Run Code Online (Sandbox Code Playgroud)

2.1任何神器

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.company</groupId>
    <artifactId>any-artifact</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <name>company-${project.artifactId}</name>

    <modules>
        <module>any-module</module>
    </modules>

    <!-- if remove finalName, maven will not …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow maven maven-package

18
推荐指数
1
解决办法
6488
查看次数