【问题标题】:How to generate jar for maven parent project如何为maven父项目生成jar
【发布时间】:2012-09-07 02:21:54
【问题描述】:

Maven 需要有一个父项目

<packaging>pom</packaging>

父 pom.xml 中的子句。安装这样的项目时,只有一个 pom-file 生成到 maven 存储库中。无论父项目是否有 Java 代码,都不会生成 jar 文件。这迫使我有额外的空父项目,这是矫枉过正。从逻辑上讲,我的一些图书馆可能同时是父母。

有没有办法为父项目生成 pom 和 jar 文件,而无需在安装之间删除/添加 packaging 子句?

【问题讨论】:

    标签: maven parent pom.xml


    【解决方案1】:

    使用 Maven Jar 插件和 Maven Build Helper。示例 POM:

    <?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>test</groupId>
      <artifactId>test</artifactId>
      <version>1.0</version>
    
      <packaging>pom</packaging>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <executions>
              <execution>
                <id>attach-artifacts</id>
                <phase>package</phase>
                <goals>
                  <goal>attach-artifact</goal>
                </goals>
                <configuration>
                  <artifacts>
                    <artifact>
                      <file>test-${project.version}</file>
                      <type>jar</type>
                    </artifact>
                  </artifacts>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
              <execution>
                <id>default</id>
                <goals>
                  <goal>jar</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    

    Maven 构建结果:

    mvn install
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building test 1.0
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) @ test ---
    [INFO] 
    [INFO] --- maven-jar-plugin:2.4:jar (default) @ test ---
    [WARNING] JAR will be empty - no content was marked for inclusion!
    [INFO] 
    [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ test ---
    [INFO] Installing /home/username/projects/test/pom.xml to /home/username/.m2/repository/test/test/1.0/test-1.0.pom
    [INFO] Installing /home/username/projects/test/test-1.0 to /home/username/.m2/repository/test/test/1.0/test-1.0.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.805s
    [INFO] Finished at: Thu Sep 06 13:33:20 EDT 2012
    [INFO] Final Memory: 4M/119M
    [INFO] ------------------------------------------------------------------------
    

    关于 Maven 实践的说明:

    父模块通常是您定义所有子模块共同使用的依赖项和插件的地方。它很少有自己的输出。您可能希望拥有一个聚合所有其他模块工件的“分发”子模块,而不是尝试在父模块中进行。

    【讨论】:

    • 谢谢你,noahz,你的解决方案。我想为父项目生成 jar 文件,以避免在我的 Eclipse 工作区中出现额外的空项目,从而简化项目关系。我是maven的新手,所以我可能错了。你推荐使用空的父项目吗?我怀疑您的解决方案会与具有自己的 jar 构建插件的子项目发生冲突。
    • 拥有一个“空”(不生成工件)的父项目是非常好的,因为它仅用于定义子项目使用的属性设置、依赖版本、插件等。顺便说一句 - 如果您使用我的解决方案,请单击复选标记接受答案。
    • 非常感谢您的回答和解释。我将按照您的建议使用空项目作为父项。
    • 这帮助我构建了我的项目,但是它找不到主类。当我删除模块然后构建时,当我去运行它时它发现主类没有问题。但是当它链接了模块并配置了上述插件时,它构建成功但找不到主。
    • @Trevor 我建议你打开一个新的 StackOverflow 问题来引用这个问题,但要关注你的具体问题
    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2010-12-23
    • 2019-02-17
    • 2013-10-26
    相关资源
    最近更新 更多