【问题标题】:How do we set/modify the name for a specific dependency defined in pom.xml for a Java project?我们如何为 Java 项目的 pom.xml 中定义的特定依赖项设置/修改名称?
【发布时间】:2019-09-20 23:04:53
【问题描述】:

现在,名称设置为“名称 + 版本”。我需要从最终名称中排除版本。 例如 - 对于

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-b</artifactId>
  <version>1.0</version>
</dependency>

我看到在我的构建中生成了 artifact-b-1.0.jar,但我希望它命名为 artifact-b.jar,这样每次版本更改时我都需要使用 jar 更改所有脚本。

【问题讨论】:

    标签: java maven dependencies pom.xml


    【解决方案1】:

    在构建期间,您的 jar 会生成到 target。您可以使用finalName 参数更改目标的名称。如果使用 install,则将工件安装到本地存储库(您不能影响本地存储库中的名称)。如果您部署,则工件将部署到远程存储库(您也不能影响名称)。

    【讨论】:

    • 你不能用install:install影响名字,但你可以用install:install-file;见my answer
    【解决方案2】:

    你可以这样做:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>package.class.main.Method</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${project.artifactId}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    【讨论】:

    • 您错过了插件名称等
    【解决方案3】:

    您可以使用Maven Install Plugininstall-file goal

        <groupId>group-a</groupId>
        <artifactId>artifact-b</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>3.0.0-M1</version>
                    <executions>
                        <execution>
                            <id>install-file-${project.artifactId}</id>
                            <goals>
                                <goal>install-file</goal>
                            </goals>
                            <phase>install</phase>
                            <configuration>
                                <file>${project.build.directory}/${project.build.finalName}.jar</file>
                                <artifactId>artifact</artifactId>
                                <version>b</version>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    mvn install 输出:

    [INFO] ...
    [INFO] 
    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ so58011949 ---
    [INFO] Building jar: ...\target\so58011949-0.0.1-SNAPSHOT.jar
    [INFO] 
    [INFO] --- maven-install-plugin:3.0.0-M1:install (default-install) @ artifact-b ---
    [INFO] Installing ...\target\artifact-b-0.0.1-SNAPSHOT.jar
           to ...\.m2\repository\group-a\artifact-b\0.0.1-SNAPSHOT\artifact-b-0.0.1-SNAPSHOT.jar
    [INFO] Installing ...\pom.xml
           to ...\.m2\repository\group-a\artifact-b\0.0.1-SNAPSHOT\artifact-b-0.0.1-SNAPSHOT.pom
    [INFO] 
    [INFO] --- maven-install-plugin:3.0.0-M1:install-file (install-file-artifact-b) @ artifact-b ---
    [INFO] Installing ...\target\artifact-b-0.0.1-SNAPSHOT.jar
           to ...\.m2\repository\group-a\artifact\b\artifact-b.jar
    [INFO] Installing ...\AppData\Local\Temp\artifact-b-0.0.1-SNAPSHOT7551062015093608214.pom
           to ...\.m2\repository\group-a\artifact\b\artifact-b.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] ...
    

    本地仓库:

    |
    +- group-a
    |  +- artifact
    |     +- b
    |        +- artifact-b.jar
    |        +- artifact-b.pom
    |  +- artifact-b
    |     +- 0.0.1-SNAPSHOT
    |        +- artifact-b-0.0.1-SNAPSHOT.jar
    |        +- artifact-b-0.0.1-SNAPSHOT.pom
    |
    

    【讨论】:

    • 我学会了更严格地看待事情。许多使用 Maven 的“快速解决方案”(后来)对我们产生了反作用,因为一些 Maven 插件或 Eclipse 集成或其他任何无法正常工作的东西。在这种情况下,我也看到了这样的问题: OP 说他/她想剥离版本号以避免在新版本到来时更改脚本。当您的 hack 应用于 Nexus 等远程存储库时,通常无法再次部署相同的工件,因为该存储库只允许您覆盖 SNAPSHOT 工件(而不是版本为 b 的工件)。
    • 我不知道。我也很惊讶它突然消失了。
    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 2014-03-23
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多