管理具有外部资源依赖关系的多个Java模块
假设我有一组n个Java库,每个库都有一个conf和一个resources文件夹,然后我有一个Java项目X,它依赖于这些n个Java库中的一些,我如何使它在构建X时,所有依赖的conf和resources文件夹都被复制并合并到dist文件夹中。不,我不想把它们埋在罐子里 显然,重复的文件名会有问题,但让我们假设所有文件都有不同的名称 编辑:另一个相关问题:如何使ProjectX能够在开发阶段检测所有依赖项目的配置和资源,而无需将它们复制到ProjectX的文件夹中。例如,我希望Netbeans能够在单击X的main方法上运行时找到被引用库使用的这些资源 Edit2:下面是一个假设的项目设置示例:管理具有外部资源依赖关系的多个Java模块,java,maven,integration,Java,Maven,Integration,假设我有一组n个Java库,每个库都有一个conf和一个resources文件夹,然后我有一个Java项目X,它依赖于这些n个Java库中的一些,我如何使它在构建X时,所有依赖的conf和resources文件夹都被复制并合并到dist文件夹中。不,我不想把它们埋在罐子里 显然,重复的文件名会有问题,但让我们假设所有文件都有不同的名称 编辑:另一个相关问题:如何使ProjectX能够在开发阶段检测所有依赖项目的配置和资源,而无需将它们复制到ProjectX的文件夹中。例如,我希望Netbeans
**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在部署后可以为它们的组成库使用不同的参数。看看可以复制DEP并将它们复制到特定位置的
<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>
看一下可以复制DEP并将其复制到特定位置的
<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>
我在你的例子中看到了以下内容。让我以库1为例 库1:图像处理 conf:处理配置,log4j 资源:培训集等 您有库1,其中包含处理配置,在我看来,这类似于运行时配置。这意味着它应该是创建的jar src/main/resources的一部分,也就是这些东西的位置。log4j配置也是如此。只需将其放入项目的jarsrc/main/resources中 现在提交到资源:培训集。如果您创建一个单独的maven项目,其中包含一个训练集,那么这将生成一个工件,并且可以稍后用于将其集成到示例1中。如果您有多个培训集,您可以创建不同的工件,并将其作为常规依赖项使用,或者使用maven依赖项插件,或者可能是maven远程资源插件,以便在您的项目中使用它们 使用此设置,您可以将库1部署到本地存储库中,当然也可以部署到存储库管理器中,并将其用作依赖项 您可以使用相同的方法来处理库2、3等
也许你可以看看,我不确定这是否有用。我在你的例子中看到了以下内容。让我以库1为例 库1:图像处理 conf:处理配置,log4j 资源:培训集等 您有库1,其中包含处理配置,在我看来,这类似于运行时配置。这意味着它应该是创建的jar src/main/resources的一部分,也就是这些东西的位置。log4j配置也是如此。只需将其放入项目的jarsrc/main/resources中 现在提交到资源:培训集。如果您创建一个单独的maven项目,其中包含一个训练集,那么这将生成一个工件,并且可以稍后用于将其集成到示例1中。如果您有多个培训集,您可以创建不同的工件,并将其作为常规依赖项使用,或者使用maven依赖项插件,或者可能是maven远程资源插件,以便在您的项目中使用它们 使用此设置,您可以将库1部署到本地存储库中,当然也可以部署到存储库管理器中,并将其用作依赖项 您可以使用相同的方法来处理库2、3等
也许你可以看看我不确定这是否有帮助。第二个问题是:如何告诉Maven每个项目都依赖于一个conf和一个资源文件夹?为了将它们保存在jar外部,我将它们放在项目的根文件夹中。顺便说一句,我使用的是Netbeans,它没有用于pom.xml的漂亮GUI:/您是在谈论非jar依赖关系,这意味着有文件夹吗?否则这就行不通了。这些项目是否位于多模块构建中?通常,您使用的依赖项有点像jar文件,它可以包含一个属性文件。是的,非jar依赖项。不,这些都是独立的项目。没有好的方法可以做到这一点。Maven不打算做这样的事情。那么我应该怎么做呢?第二个问题是:我如何告诉Maven每个项目都依赖于一个conf和一个资源文件夹?为了将它们保存在jar外部,我将它们放在项目的根文件夹中。顺便说一句,我使用的是Netbeans,它没有用于pom.xml的漂亮GUI:/您是在谈论非jar依赖关系,这意味着有文件夹吗?否则这就行不通了。这些项目是否位于多模块构建中?通常,您使用的依赖项有点像jar文件,它可以包含一个属性文件。是的,非jar依赖项。不,这些都是独立的项目。没有好的方法可以做到这一点。马文无意做这样的事
s、 那我该怎么做呢?谢谢你的回复。一个萦绕在我脑海中的问题是,如果说有几个这样的库,那么每个库都必须手动部署。通常,在发布期间,您只能通过maven部署一次,或者通过mvn部署几次,将快照版本部署到本地存储库中。还是我遗漏了什么?不,我只是在评论库1-3必须与可执行项目1一起单独部署到目标文件夹的问题。可执行项目1也是单独部署的。感谢您的回复。一个萦绕在我脑海中的问题是,如果说有几个这样的库,那么每个库都必须手动部署。通常,在发布期间,您只能通过maven部署一次,或者通过mvn部署几次,将快照版本部署到本地存储库中。还是我遗漏了什么?不,我只是在评论库1-3必须与可执行项目1一起单独部署到目标文件夹的问题,可执行项目1也是单独部署的。与execellent Khmarbaise answer一样,我推荐他指出的方法。看看这里,这是完全相同的需求:就像execellent Khmarbaise的回答一样,我会推荐他指出的方式。看看这里,这是完全相同的需求: