2

假设我有一组 n 个 Java 库,每个库都有一个 conf 和一个资源文件夹,然后我有一个 Java 项目 X,它依赖于其中一些 n 个 Java 库,我该如何制作它,以便在构建 X 时,所有依赖conf 和 resources 文件夹被复制并合并到 dist 文件夹中。不——我不希望它们被嵌入罐子里。

显然,重复文件名会有问题,但我们假设所有文件都有不同的名称。

编辑:另一个相关的问题:如何让项目 X 在所有依赖项目的开发阶段检测到配置和资源,而无需将它们复制到项目 X 的​​文件夹中。例如,当我在 X 的主方法上单击“运行”时,我希望 Netbeans 能够找到引用的库使用的这些资源。

Edit2:这是一个项目设置的假设示例:

**Library 1:** Image Processing

conf: Processing configurations, log4j
resources: Training sets, etc.

**Library 2:** Machine Learning

conf: Training parameters, log4j
resources: Dependent C++ batch files (i.e. system calls)

**Library 3:** Reporting Tool

resources: Reporting templates

**Library 4:** Text Mining Toolkit

conf: Encoding, character sets, heuristics
resources: Helper PHP scripts

**Executable Project 1: **

Uses Library 1 to process images 
Uses Library 2 to do machine learning on processed images
Uses Library 3 to make reports

**Executable Project 2: **

Uses Library 4 to do text mining
Uses Library 2 to do machine learning on collected textual information
Uses Library 3 to make reports

我们可以假设可执行项目 1 和 2 可以在部署后为其组成库使用不同的参数。

4

2 回答 2

2

看看maven-dependency-plugin可以复制 deps 并将它们复制到特定位置。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.5.1</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                  <destFileName>optional-new-name.jar</destFileName>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/wars</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
于 2012-09-19T18:32:42.620 回答
2

我在您的示例中看到以下内容。让我以图书馆 1 为例。

库 1:图像处理

conf:处理配置,log4j资源:训练集等。

您有库 1,其中包含处理配置,这在我看来就像运行时配置。这意味着它应该是创建的 jar 的一部分(src/main/resources 这些东西的位置)。log4j 配置也是如此。只需将其放入 jar 中(项目的 src/main/resources.

现在进入资源:训练集。如果您创建了一个包含训练集的单独 maven 项目,那么这将生成一个工件,稍后可以将其集成到示例 1 中。如果您有多个训练集,您可以创建不同的工件并将它们用作通常的依赖项或使用 maven-dependency-plugin(或者可能是 maven-remote-resources-plugin)在您的项目中使用它们。

通过此设置,您可以将 Library 1 部署到本地存储库中,当然也可以部署到存储库管理器中,并将其用作依赖项。

您可以使用相同的方法来处理库 2、3 等。

也许你可以看看maven-remote-resource-plugin(我不确定这是否有帮助)。

于 2012-09-19T19:20:13.193 回答