0

我想用 maven 创建多模块独立应用程序。

就我而言,我想让'Loader'项目(.jar)包含所有其他项目。但现在我只有一组 .jar 文件(loader.jar、 crawler1.jar ...等)

装载机的 .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>com.javanix.jmetalcrawler</groupId>
    <artifactId>loader</artifactId>
    <version>1.0</version>


    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

子项目的 .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>com.javanix.jmetalcrawler</groupId>
    <artifactId>Crawler-1</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.javanix.jmetalcrawler</groupId>
            <artifactId>loader</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

父母的 .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>com.javanix.jmetalcrawler</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>jMetalCrawler</name>

    <modules>
        <module>Crawler-1</module>
        <module>Loader</module>
    </modules>


</project>

生命周期

  1. 编译'Loader'(有接口/抽象类)
  2. 编译/打包'crawler1'(因为它取决于'Loader'项目)
  3. 编译/打包'crawler2'(因为它取决于'Loader'项目)
  4. 带有已编译“爬虫”项目的包加载器

PS

  1. 感谢 Adrian Shum ,他提出了一个让我的项目更清晰的想法
  2. 在“启动器”项目中重组我的项目后,我们可以通过maven-assembly-plugin(@see http://rombertw.wordpress.com/2010/05/14/maven-recipe-building-an-aggregate-jar/)添加依赖项
4

2 回答 2

2

我建议这样的项目结构:

loader  (POM, multi-module)
  + loader-api  (JAR)
  + crawler1    (JAR, depends on loader-api)
  + crawler2    (JAR, depends on loader-api)
  + loader-app  (JAR, depends on loader-api, crawler1, crawler2.  
                 The standalone app is built here)

通过拆分爬虫依赖的API和应用程序本身,整个项目结构更易于管理。而且,它也更加模块化,因为我们不再将 API 与应用程序混合

于 2012-11-27T07:32:10.857 回答
0

如果您所说的“使用 maven 的多模块独立应用程序”是指包含其所有依赖项的自包含、可执行 jar,那么onejar-maven-plugin可能就是您要寻找的。有关使用示例,请参阅文档

于 2012-11-26T20:27:58.960 回答