标签: plexus

如何从Plexus组件获取当前的MavenSession或MavenExecutionRequest

我创建了一个Plexus组件来容纳我想要创建的几个Mojos的通用逻辑.我已经能够localRepository从Mojo(和测试用例)传递信息和项目.

我想知道是否有办法从组件中获取MavenSessionMavenExecutionRequest从组件中传递它们作为Mojo的参数.我知道我的组件将从Maven Mojo运行.

我在这个例子中使用Maven 2.

components maven-2 mojo plexus maven

58
推荐指数
1
解决办法
2057
查看次数

什么是'丛丛',它与maven有什么关系?

有人可以向我解释一下Plexus是什么http://plexus.codehaus.org/

它与Maven有什么关系?

plexus maven-plugin maven

17
推荐指数
1
解决办法
3814
查看次数

CompilerMojo #cute()导致链接错误(java.lang.NoSuchMethodError)并且可能已过时

我已经搜索了谷歌并在StackOverflow上查看了答案,但似乎无法解决这个问题.我最近加入了这个项目并为POM添加了一些东西.作为Maven的相对新手,我没有理解这个问题,我所看到的反应并没有得到澄清.我怀疑这是Groovy添加到项目中.我想使用Groovy和Spock进行测试(并且希望最终也能用于测试).

[INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files
[FATAL ERROR] org.apache.maven.plugin.CompilerMojo#execute() caused a linkage error (java.lang.NoSuchMethodError) and may be out-of-date. Check the realms:
[FATAL ERROR] Plugin realm = app0.child-container[org.apache.maven.plugins:maven-compiler-plugin:2.0.2]
urls[0] = file:/C:/Users/bill.turner/.m2/repository/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.jar
urls[1] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/groovy/groovy-eclipse-compiler/2.7.0-01/groovy-eclipse-compiler-2.7.0-01.jar
urls[2] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/groovy/groovy-eclipse-batch/2.0.4-02/groovy-eclipse-batch-2.0.4-02.jar
urls[3] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.jar
urls[4] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar
urls[5] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.jar
urls[6] = file:/C:/Users/bill.turner/.m2/repository/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.jar
[FATAL ERROR] Container realm = plexus.core
urls[0] = file:/C:/Users/bill.turner/apache-maven-2.2.1/lib/maven-2.2.1-uber.jar
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] org.codehaus.plexus.compiler.CompilerConfiguration.getDebugLevel()Ljava/lang/String;
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.NoSuchMethodError: org.codehaus.plexus.compiler.CompilerConfiguration.getDebugLevel()Ljava/lang/String;
    at org.codehaus.groovy.eclipse.compiler.GroovyEclipseCompiler.createCommandLine(GroovyEclipseCompiler.java:343) …
Run Code Online (Sandbox Code Playgroud)

groovy plexus maven

9
推荐指数
1
解决办法
4393
查看次数

替换 Maven 3 中的 plexus 组件

我需要用我自己的实现替换一些 Maven 默认功能,我正在寻找一种干净的方法来做到这一点。

我已经org.apache.maven.repository.internal.DefaultVersionRangeResolver使用 component.xml扩展并注册了我的扩展组件,如下所示:

<component-set>
    <components>
        <component>
            <role>org.sonatype.aether.impl.VersionRangeResolver</role>
            <role-hint>default</role-hint>
            <implementation>com.my.custom.VersionRangeResolver
            </implementation>
            <isolated-realm>false</isolated-realm>
            <requirements>
                <requirement>
                    <role>org.sonatype.aether.spi.log.Logger</role>
                    <role-hint />
                    <field-name>logger</field-name>
                </requirement>
                <requirement>
                    <role>org.sonatype.aether.spi.log.Logger</role>
                    <role-hint />
                    <field-name>logger2</field-name>
                </requirement>
                <requirement>
                    <role>org.sonatype.aether.impl.MetadataResolver</role>
                    <role-hint />
                    <field-name>metadataResolver</field-name>
                </requirement>
            </requirements>
        </component>
    </components>
</component-set>
Run Code Online (Sandbox Code Playgroud)

我已经在我的本地 repo 中安装了包含它的项目,我在另一个项目的 pom.xml 中像这样引用它:

<build>
    <extensions>
        <extension>
            <groupId>my.groupId</groupId>
            <artifactId>maven-version-resolver</artifactId>
            <version>SNAPSHOT</version>
        </extension>
    </extensions>
</build>
Run Code Online (Sandbox Code Playgroud)

但是,我的神器没有使用。当我在构建中运行这个小的 GMaven groovy 脚本时:

session.container.getComponentDescriptorList(
    'org.sonatype.aether.impl.VersionRangeResolver'
).each{
    println "Role Hint: ${it.roleHint}, implementation: ${it.implementation}" ;
}
Run Code Online (Sandbox Code Playgroud)

它向我展示了默认实现和我自己的实现,都带有“默认”提示。那么我该如何解决这个问题呢?

  • 我是否需要在 components.xml 中设置一个额外的参数(也许优先级更高)?
  • 我是否需要将我的组件编写为 Maven 插件并以编程方式主动注册该组件?
  • 是否有任何涵盖此内容的 Plexus 文档?

plexus maven-3 maven

5
推荐指数
1
解决办法
1660
查看次数

(普通)Classworlds和Plexus Classworlds之间的区别?

谁能解释一下plexus-classworlds(普通)classworlds之间的区别?

这两个令人困惑,看不出差异.Plexus classworlds几乎没有描述.显然,基于maven的Java项目使用两者,我不明白为什么.

有没有可能用plexus-classworld取代classworlds而没有太多麻烦?

maven-2 plexus

5
推荐指数
1
解决办法
1199
查看次数

Maven发布/ scm标签/ Plexus DirectoryScanner中的无限递归错误?

我发现我的Maven版本在scm标记阶段失败,在发布插件中有明显的无限递归:

... (hundreds more times)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scan(DirectoryScanner.java:346)
at org.codehaus.plexus.util.FileUtils.getFileAndDirectoryNames(FileUtils.java:1886)
at org.codehaus.plexus.util.FileUtils.getFileNames(FileUtils.java:1813)
at org.codehaus.plexus.util.FileUtils.getFileNames(FileUtils.java:1795)
at org.codehaus.plexus.util.FileUtils.getFiles(FileUtils.java:1769)
at org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand.executeTagCommand(SvnTagCommand.java:172)
at org.apache.maven.scm.command.tag.AbstractTagCommand.executeCommand(AbstractTagCommand.java:81)
at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
at org.apache.maven.scm.provider.svn.AbstractSvnScmProvider.executeCommand(AbstractSvnScmProvider.java:388)
at org.apache.maven.scm.provider.svn.AbstractSvnScmProvider.tag(AbstractSvnScmProvider.java:368)
at org.apache.maven.scm.provider.AbstractScmProvider.tag(AbstractScmProvider.java:846)
at org.apache.maven.shared.release.phase.ScmTagPhase.execute(ScmTagPhase.java:127)
...
Run Code Online (Sandbox Code Playgroud)

这个构建看起来还不错:

[INFO] Working directory: /Users/srowen/Documents/Development/ZXing
[INFO] Tagging release with the label zxing-2.2...
[INFO] Executing: /bin/sh -c cd /Users/srowen/Documents/Development/ZXing && svn --non-interactive copy --file /var/folders/tx/g74p23497xz89k7ngn6_6ykr0000gn/T/maven-scm-1363236967.commit --revision 2758 https://zxing.googlecode.com/svn/trunk https://zxing.googlecode.com/svn/tags/zxing-2.2
[INFO] Working directory: /Users/srowen/Documents/Development/ZXing
Run Code Online (Sandbox Code Playgroud)

有没有人见过这样的东西?它是否响铃可能暗示一些本地问题?没有符号链接,这里没有涉及特别深的目录结构.

svn release plexus maven

5
推荐指数
1
解决办法
397
查看次数

在单独的线程中移动项目时,不完整的丛容器注入

我有以下简化示例涉及丛集容器:

package de.vogel612.depanalyzer;

import de.vogel612.depanalyzer.dependency.MavenResolutionTaskReal;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.artifact.repository.layout.FlatRepositoryLayout;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.impl.RemoteRepositoryManager;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.spi.locator.ServiceLocator;
import org.eclipse.aether.transport.file.FileTransporterFactory;
import org.eclipse.aether.transport.http.HttpTransporterFactory;

public class MCVE {

    private static final ServiceLocator serviceLocator = MavenRepositorySystemUtils.newServiceLocator()
            .addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class)
            .addService(TransporterFactory.class, FileTransporterFactory.class)
            .addService(TransporterFactory.class, HttpTransporterFactory.class);


    private static final PriorityBlockingQueue<ResolutionTask> taskQueue = new PriorityBlockingQueue<>();
    private static final ExecutorService consumer = Executors.newSingleThreadExector();
    // actually initialized in main, since number of threads is configurable
    private static ExecutorService workers …
Run Code Online (Sandbox Code Playgroud)

java multithreading plexus maven

5
推荐指数
0
解决办法
83
查看次数

从 Plexus 获取 Maven 实例

我目前正在尝试让 PlexusContainer 在Mavenmaven 或 eclipse 执行上下文之外为我提供一个初始化的实例。

为此,我有以下代码(简化):

PlexusContainer container = null;
try {
    container = new DefaultPlexusContainer();
    container.lookup(MavenResolutionTask.class).run();
    container.dispose();
} catch (Exception e) {
    e.printStackTrace();
}

// --- MavenResolutionTask.java:

@Component(role = MavenResolutionTask.class)
// ResolutionTask is an abstract class 
// implementing Runnable and extending CompletableFuture
public class MavenResolutionTask extends ResolutionTask {

    @Requirement
    private Maven maven;
}
Run Code Online (Sandbox Code Playgroud)

鉴于我plexus-component-metadata:process-classes在 pom.xml 中有标准的插件执行,如果它像这样工作,我会很喜欢的。

不幸的是,运行此代码会导致 LookupException,原因如下(为简洁起见,省略了堆栈跟踪):

WARN Sisu - Error injecting: org.apache.maven.project.DefaultProjectBuildingHelper
com.google.inject.ProvisionException: Guice provision errors:

1) No implementation for org.apache.maven.repository.RepositorySystem was …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection plexus maven

3
推荐指数
1
解决办法
1133
查看次数