我目前正在开发一个从Ant迁移到Maven的相当大的项目。实际的构建过程没有问题(它编译和打包源代码很好)。
问题在于我还有很多为项目生成额外资源的目标(编译LessCSS,生成和上传文档,为自定义标记和函数生成tld
文件等)。我不确定我应该如何处理这些任务。让我们以构建CSS& JS的目标为例(其他人或多或少相似,但没有连接)。它看起来像这样(简化):
<target name="build.css_js">
<concat destfile="${webapp.dir}/scripts/main.js">
<fileset dir="${webapp.dir}/scripts/src" includes="*.js"/>
</concat>
<!-- build css files from less sources -->
<taskdef name="lesscss" classname="com.asual.lesscss.LessEngineTask" classpathref="libraries" />
<lesscss input="${webapp.dir}/syles/src/input.less" output="${webapp.dir}/styles/output.css" />
</target>
在pom.xml
我设置了以下插件:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<configuration>
<tasks>
<echo message="Hello World from pom.xml"/>
<ant target="build.css_js"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我正在使用的依赖项不再在我们的SVN存储库中(因为它们由Maven管理),所以我将库变量切换为指向Maven存储库:
<property name="lib.dir" location="${env.HOMEPATH}/.m2/repository" />
这不好,因为该路径可能仅在我的机器上有效。我不知道从Maven存储库引用库的任何其他方法,我需要它们来运行ant目标。
site
生命周期,我认为这符合我的需求。 我是Maven的新手所以感谢任何建议。
答案 0 :(得分:1)
通常嵌入antrun调用并不理想,但如果您没有找到合适的插件来执行您需要的操作,那么我不会担心它。如果处理相当简单,实际上很容易将它自己嵌入到Maven插件中,请参阅this example以获取入门帮助。
如果您要使用antrun,并且依赖关系jar已经安装到您的Maven存储库,您可以将antrun插件配置为在执行时使用这些jar作为插件配置的依赖项。这意味着依赖关系将被解析并可供使用,但对您的项目不可见(有助于避免意外包含)。然后以便携方式访问它们,您可以使用:
<property name="lib.dir" location="${settings.localRepository}" />
或者,您可以使用一些其他可用属性将Maven类路径公开给antrun插件,例如${maven.compile.classpath}
有关详细信息,请参阅antrun documentation。
如果您有多个针对ant的离散执行,您可以在antrun插件中单独配置它们,并为每个执行指定合适的id
。下面的示例显示了两个执行,都绑定到流程资源阶段。当然,你需要提供一些实际目标。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>build-css</id>
<phase>generate-resource</phase>
<configuration>
<target>
...
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>build-js</id>
<phase>generate-resource</phase>
<configuration>
<target>
...
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>some.group.id</groupId>
<artifactId>artifactId</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>another.group.id</groupId>
<artifactId>anotherId</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>