我从事多模块Maven项目。其中一个模块在目标文件夹中生成一些html文件,我需要在构建过程中将它们复制到另一个模块的目标文件夹中。它们都不是webapp。
我不确定该怎么做。我可以在jar中找到html文件,然后复制它们吗?有Maven插件吗?
答案 0 :(得分:0)
如果资源位于另一个模块的JAR内,则可以通过以下方式使用maven-dependency-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-some-resources</id>
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.acme</groupId>
<artifactId>some-module</artifactId>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/some-module-unpack</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
要使其正常工作,com.acme:some-module
必须是您正在使用的模块的依赖项。
如果资源不在JAR内,则可以使用普通的老式Ant:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-somes-resources</id>
<phase>generate-test-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target name="copy-somes-resources">
<property name="dest.dir" value="${project.build.directory}/some-module-copy" />
<mkdir dir="${dest.dir}" />
<move todir="${dest.dir}">
<fileset dir="${project.basedir}/../some-module/target">
<include name="**/*.html" />
</fileset>
</move>
</target>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:0)
您应该依赖的Maven模块的唯一输出是其工件(POM文件,主要工件,例如,如果您确实愿意的话,例如JAR,WAR,ZIP,它是附加的工件,可以通过分类器解决,例如作为test-jar
)。
应避免使用其他方法来访问文件,例如巧妙的相对路径欺骗,以防万一。
要向生成一些HTML文件的模块中添加其他工件,可以使用Maven组件插件的assembly:single
goal。您必须定义一个描述符,以定义从何处包含内容(即HTML文件)。使用appendAssemblyId
(已经有true
,attach
和classifier
等参数,您可以控制它成为该模块的附加附件,您可以在其中依赖其他模块通过指定分类器。假设您的分类器为my-html-files
,则您的第二个模块可能依赖于以下HTML文件:
<dependency>
<groupId>my.group</groupId>
<artifactId>first-module</artifactId>
<version>1.0.0-SNAPSHOT</version>
<classifier>my-html-files</classifier>
</dependency>
这会将(HTML)文件带到类路径中。如果那不是您想要的地方,则可能必须先打开它们的包装。 unpack
mojo可能对此有用。我认为this是一个不错的示例(请注意,此处的依赖关系表示为<artifactItem/>
,而不是正常的<dependency/>
)。