如何预先构建在Maven中用作依赖项的jar

我创建了完美工作的POM.xml文件,直到我删除了第三方jar,这依赖于我的项目。 问题是该jar缺失,但它是使用maven-antrun-plugin创建的。 这是创建jar的插件的源代码:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <property environment="env" />
                            <property name="appname" value="hellojavaworld" />
                            <echoproperties />
                            <exec dir="" executable="respawn.exe" searchpath="true">
                                <arg value="${basedir}srcaion${appname}.app" />
                            </exec>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
</plugin>

进一步在POM.xml文件中是这样的:

<dependency>
        <groupId>hellojavaworld</groupId>
        <artifactId>hellojavaworld</artifactId>
        <scope>system</scope>
        <systemPath>${basedir}srcaionhellojavaworld.binhellojavaworld.jar</systemPath>
        <version>1.0</version>
        <optional>true</optional>
</dependency>

如果hellojavaworld.jar是手动编译的,一切都可以正常工作,但如果jar不存在,就会出现缺失工件的错误。

问题是如何编写POM.xml来创建在一个POM.xml文件中用作依赖项的jar,而无需手动干预?

谢谢


一种解决方案是使用多模块构建。 SonaType书有一章专门讨论这个问题。

基本上你会需要三个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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.sonatype.mavenbook.multi</groupId>
    <artifactId>parentHoldsItTogether</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Multi Chapter Simple Parent Project</name>

    <modules>
        <module>hellojavaworld</module>
        <module>thingThatNeedsHellojavaworld</module>
    </modules>
</project>

hellojavaworld的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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.sonatype.mavenbook.multi</groupId>
        <artifactId>parentHoldsItTogether</artifactId>
        <version>1.0</version>
    </parent>
    <artifactId>hellojavaworld</artifactId>
    <packaging>jar</packaging>
</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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.sonatype.mavenbook.multi</groupId>
        <artifactId>parentHoldsItTogether</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>thingThatNeedsHellojavaworld</artifactId>
    <packaging>???</packaging>
    <dependencies>
        <dependency>
            <groupId>org.sonatype.mavenbook.multi</groupId>
            <artifactId>hellojavaworld</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>    
</project>

你会像这样组织目录结构:

your_project_folder/
    pom.xml                        <-- the parent POM
    hellojavaworld/
        pom.xml                 
        src/main/java
    thingThatNeedsHellojavaworld/
        pom.xml
        src/main/java

创建一个多模块maven项目:参见Maven的第6章。 第一个模块是你hellojavaworld,第二个模块是依赖于hellojavaworld的应用程序。

pom.xml中:

<project>
...
<modules>
  <module>hellojavaworld</module>
  <module>application</module>
</modules>
...

应用程序/ pom.xml的

...
<dependencies>
  <dependency>
    <groupId>hellojavaworld</groupId>
    <artifactId>hellojavaworld</artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>
...
链接地址: http://www.djcxy.com/p/29663.html

上一篇: How to pre build jar which is used as dependency in Maven

下一篇: how to download and install jar in my local repo Maven