当前位置: 首页 > 知识库问答 >
问题:

添加Ecli OSGi bundle的maven依赖关系

轩辕阳焱
2023-03-14

我有一些OSGi包(简单的OSGi,没有eclipse依赖项)和一个maven构建,使用pax runner在Knopflerfish服务器中启动它们。

maven构建和启动包工作得非常好,但是只能通过Pax runner(< code > mvn Pax:provision )。

为了调试捆绑包,最好直接从eclipse中启动它们,否则我的断点不会触发(似乎很明显,因为pax:provision启动不再与eclipse绑定的构建jar文件)。

清单。MF-file是以通常的maven方式构建的,意味着使用maven-bundle-plugin。因此,直接从eclipse启动这些包会失败,因为eclipse平台错过了所有必需的外部OSGi包,而maven正是通过这些包实现了maven的魔力。

因此我正在寻找一种方式来建立我的ecli

我检查了目标平台的设置,但是显然只能向其中添加特定的jar和文件夹,而不能像使用整个本地maven存储库那样添加整个文件夹结构。如果我需要为每一个新的依赖项更新我的目标平台,这将变得非常糟糕(我希望我可以做一些类似“将C:\ Users \ my profile . m2 \ repository添加到目标平台”的事情,eclipse将只加载它需要的东西)。

在研究我发现Eclipse第谷但appare

我的问题是,插件将退出

[ERROR] Failed to execute goal lt.velykis.maven:pde-target-maven-plugin:1.0.0:add-pom-dependencies (default-cli) on project orchestrator-parent: The parameters 'baseDefinition' for goal lt.velykis.maven:pde-target-maven-plugin:1.0.0:add-pom-dependencies are missing or invalid -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal lt.velykis.maven:pde-target-maven-plugin:1.0.0:add-pom-dependencies (default-cli) on project orchestrator-parent: The parameters 'baseDefinition' for goal lt.velykis.maven:pde-target-maven-plugin:1.0.0:add-pom-dependencies are missing or invalid
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:220)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:46)
Caused by: org.apache.maven.plugin.PluginParameterException: The parameters 'baseDefinition' for goal lt.velykis.maven:pde-target-maven-plugin:1.0.0:add-pom-dependencies are missing or invalid
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:581)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:534)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:97)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 20 more
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginParameterException

这是插件的配置:

        <plugin>
            <groupId>lt.velykis.maven</groupId>
            <artifactId>pde-target-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <id>pde-target</id>
                    <goals>
                        <goal>add-pom-dependencies</goal>
                    </goals>
                    <configuration>
                        <baseDefinition>D:/platform.target</baseDefinition>
                        <outputFile>D:/platform-pde.target</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我可以看到,道路是正确的,因为<

文件内容(只是我创建并作为基本文件共享的标准目标平台):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?><target name="OrchestratorPlatform" sequenceNumber="8">
<locations>
<location path="${eclipse_home}" type="Profile"/>
</locations>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
<nl>en_US</nl>
</environment>
<launcherArgs>
<vmArgs>-Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx512m</vmArgs>
</launcherArgs>
</target>

我正在寻找的是关于如何正确配置插件的提示,或者任何其他我可以将我的maven依赖包带入我的目标平台的方法,这样我就可以直接从eclipse启动包,而不必再次在eclipse首选项的深处维护依赖。

共有2个答案

董同
2023-03-14

我经常使用Apache Karaf进行远程调试。在那里,karaf还从maven仓库加载包。eclipse仍然会找到断点并触发它们。因此,pax runner也应该如此。

我做的是导出KARAF_DEBUG=true,启动KARAF。这将触发典型的远程调试设置,pax runner也应该可以使用这些设置。然后,我从eclipse启动一个远程调试会话,并简单地将所有必需的打开的eclipse项目添加到远程调试会话的源代码中。这几乎在任何时候都有效。有时我的断点也不会被触发,但这很少发生,我也不知道为什么。

顺便说一句。Karaf还允许更新的包

因此,要继续学习,你应该能够毫无问题地使用pax runner进行远程调试,而且看一看apache karaf可能也很有意思。

虞高雅
2023-03-14

您可以尝试运行PAX,为您的测试容器定义vm选项。默认情况下,容器在一个单独的JVM中启动,您可以为它定义命令行选项。在文档中,你甚至可以找到一个在调试模式下开始测试的例子。只需定义suspend=y,就有足够的时间将Eclipse与远程调试会话连接起来。

Pax Runner还有一个eclipse插件,你可以试试。

编辑:根据你在评论中发给我的启动配置,你调试了maven JVM,而不是OSGI容器。

很难找到< code>pax:provision的文档。我尝试了< code >帮助:描述:

C:\>mvn help:describe -Dplugin=org.ops4j:maven-pax-plugin:1.5 -Dgoal=provision -Ddetail
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
[INFO] Mojo: 'pax:provision'
pax:provision
  Description: Provision all local and imported bundles onto the selected
    OSGi framework
      mvn pax:provision [-Dframework=felix|equinox|kf|concierge] [-Dprofiles=log,war,spring,...]

    If you don't have Pax-Runner in your local Maven repository this command
    will automatically attempt to download the latest release. It will then
    continue to use this locally installed version of Pax-Runner unless you add
    -U to force it to check online for a later release, or -Drunner=version to
    temporarily use a different version.
  Implementation: org.ops4j.pax.construct.lifecycle.ProvisionMojo
  Language: java

  Available parameters:

    args
      User property: args
      URL of file containing additional Pax-Runner arguments.

    deploy (Default: true)
      User property: deploy
      When true, start the OSGi framework and deploy the provisioned bundles.

    deployPoms
      User property: deployPoms
      Comma separated list of additional POMs with bundles as dependencies.

    deployURLs
      User property: deployURLs
      Comma separated list of additional bundle URLs to deploy.

    framework
      User property: framework
      Name of the OSGi framework to deploy onto.

    noDependencies
      User property: noDeps
      Ignore bundle dependencies when deploying project.

    profiles
      User property: profiles
      Comma separated list of additional Pax-Runner profiles to deploy.

    provision
      User property: provision
      A set of provision commands for Pax-Runner.

    runner (Default: RELEASE)
      User property: runner
      The version of Pax-Runner to use for provisioning.


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.570s
[INFO] Finished at: Wed Feb 19 00:01:05 CET 2014
[INFO] Final Memory: 8M/109M
[INFO] ------------------------------------------------------------------------

看起来是这样的:

> < li>

创建包含以下文本的文件:

--vmOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888

像这样运行您的构建:

mvn Pax:provision-Dargs = file:///c:/yourfilepath/the file containing stuff above . txt

我没有试过,但它可以工作。挂起,端口8888,Eclipse远程调试:)

 类似资料:
  • 我们用Maven和Tycho构建了一个Eclipse插件。然而,目前我们仍然通过一堆手动添加的JAR文件而不是Maven来提供所有的项目依赖。这是由于以下原因:(1)依赖项不能通过标准的Eclipse更新站点获得(至少不能在当前版本中获得),(2)依赖项不能作为捆绑包获得。 这些依赖项中最大的部分是Selenium库(API,远程,特定于浏览器的库及其传递依赖项,例如Guava等)。 我浪费了几个

  • 如何将此WorldEdit依赖项添加到Maven项目中?http://maven.sk89q.com/artifactory/repo/com/sk89q/worldedit/worldedit-bukkit/我需要6.1.1快照。 是否有算法来获取组ID工件ID和版本?

  • 错误:无法初始化主类com.companyname.bank.App,原因是:java.lang.NoClassDefFoundError:org/apache/http/client/ResponseHandler 我在pom.xml文件中添加了依赖项,在/src/lib中也添加了相关的.jar文件之后,这个报告一直出现。真的很困惑,不知道怎么解决。 请帮我一把。谢谢。 以下是我的操作流程: >

  • 问题内容: 如何获取我拥有的jar文件并将其添加到Maven 2的依赖系统中?我将成为此依赖项的维护者,并且我的代码需要在类路径中使用此jar,以便对其进行编译。 问题答案: 您必须分两步执行此操作: 1.给您的JAR一个groupId,artifactId和版本,然后将其添加到您的存储库中。 如果您没有内部存储库,而只是试图将JAR添加到本地存储库,则可以使用任意groupId / artifa

  • 使用 我修改了以包含导入语句。因此,maven无法找到我试图使用并将其与项目链接的jar。 我向pom.xml文件添加了一个依赖项,如下所示: