Maven:没有要安装的主要工件,而是安装附加的工件

时间:2013-12-30 21:55:25

标签: java maven jar

我有一个 Maven POM看起来像这样(oss-parent可以看到here):

<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.blockwithme</groupId>
        <artifactId>oss-parent</artifactId>
        <version>0.0.5</version>
    </parent>

    <groupId>com.blockwithme</groupId>
    <artifactId>xtend-contrib-parent</artifactId>
    <version>0.0.3</version>
    <packaging>pom</packaging>
    <inceptionYear>2013</inceptionYear>
    <name>Xtend Contrib Parent</name>
    <dependencies>
        <dependency>
            <groupId>org.eclipse.xtend</groupId>
            <artifactId>org.eclipse.xtend.lib</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.xtend</groupId>
            <artifactId>org.eclipse.xtend.core</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.xtend</groupId>
                <artifactId>xtend-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <modules>
        <module>base</module>
        <module>examples</module>
    </modules>
</project>

使用看起来像这样的子“基础”POM:

<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.blockwithme</groupId>
        <artifactId>xtend-contrib-parent</artifactId>
        <version>0.0.3</version>
    </parent>
    <artifactId>xtend-contrib-base</artifactId>
</project>

它在本地仓库中创建并安装子Jar。但我也想安装源和/或javadoc。所以我将它添加到 POM:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
</plugin>

但是,如果我这样做,源和javadoc安装,但编译后的代码jar 停止安装,这对我没有意义。 Maven给出了这个警告:

[INFO] No primary artifact to install, installing attached artifacts instead.

如果我没有尝试安装源代码,那么会出现。添加maven-jar-plugin插件没有帮助。也没有添加“&lt; packaging&gt; jar&lt; / packaging&gt;”给孩子POM。

2 个答案:

答案 0 :(得分:1)

我的猜测是它正在尝试在parentPom中执行此操作。我不会在你的parentPom中定义常见的插件。在您的parentPom中,我将在POM的pluginManagement部分(而不是插件部分)中定义插件(及其版本)。然后,在每个子节点中,说明使用哪些插件(没有声明中的版本)。这将提供更多控制。

答案 1 :(得分:1)

您可以尝试将源插件的目标从jar更改为jar-no-fork。将source:jar目标作为生命周期的一部分,Maven将重新运行生成源及其前身的所有目标。我的假设是在该循环中有一个干净的执行,擦除主jar文件。相反,jar-no-fork将不会再次运行绑定目标。

插件配置应如此

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-source-plugin</artifactId>
   <executions>
      <execution>
         <phase>package</phase>
         <goals>
            <goal>jar-no-fork</goal>
         </goals>
      </execution>
   </executions>
</plugin>