需要在运行时从我的应用程序运行 maven jaxb2 插件。是否可以?
问问题
1538 次
2 回答
4
也许我做了一些可以帮助你的事情:
/**
* @author swoeste
*
*/
public class MavenExecutor {
private final File configuration;
private final ClassWorld classWorld;
/**
* Constructor for a new maven executor.
*
* @param aConfiguration
*/
public MavenExecutor( final File aConfiguration ) {
this.configuration = aConfiguration;
this.classWorld = new ClassWorld( "plexus.core", this.getClass().getClassLoader() ); //$NON-NLS-1$
}
/**
* This method is used to perform a mvn command on the given pom. The original
* command must be given, also the sub folder and the marker folder in the working directory. The working directory
* and the configuration file will be added before execution.
*
* @param cmd the mvn command to execute
* @param pom the absolute path to a maven pom file
* @param output the absolute path to the working directory
* @param folder the output sub folder of the working directory
* @param marker the marker sub folder of the working directory
* @return
*/
public int unpack( final String cmd, final File pom, final File output, final String folder, final String marker ) {
final List<String> commands = new ArrayList<String>( //
Arrays.asList( cmd.split( ConfigurationConstants.MAVEN_DELIMITER ) ) );
commands.add( "-DoutputDirectory=" + output.getAbsolutePath() + folder ); //$NON-NLS-1$
commands.add( "-DmarkersDirectory=" + output.getAbsolutePath() + marker ); //$NON-NLS-1$
commands.add( "-gs=\"" + this.configuration.getAbsolutePath() + "\"" ); //$NON-NLS-1$//$NON-NLS-2$
commands.add( "-f=\"" + pom.getAbsolutePath() + "\"" ); //$NON-NLS-1$ //$NON-NLS-2$
return MavenCli.doMain( commands.toArray( new String[commands.size()] ), this.classWorld );
}
}
我不知道你到底想做什么,但如果你想在一个 Maven 项目上执行一个 Maven 插件,上面的代码就可以工作。就我而言,我在项目上执行 mvn dependency:unpack-dependencies 命令。
要使上述工作正常,您需要此依赖项:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.0.3</version>
</dependency>
PS:有关如何从 java 执行 maven 的信息的一个很好的资源是 m2eclipse 插件的实现;)
于 2012-04-20T11:15:01.750 回答
0
我真的需要那个,当然可以。只需下载插件的源代码并查看里面发生了什么。您可以实例化一个适当的 Mojo(实现插件目标的类)并执行它。但是,通常插件的目标在很大程度上取决于 Maven 项目上下文,这可能很难提供(甚至以某种方式模拟),因此 Mojo 能够在没有错误的情况下执行。
我不知道你的具体情况,但我 99% 确信编写自己想要实现的东西的实现会更明智,可能基于你在插件源代码中找到的东西(而不是写所有东西靠自己)。
于 2012-04-20T11:02:16.987 回答