如何将jar依赖项添加到xtext maven build

问题描述 投票:2回答:1

在我的xtext dsl项目中使用maven jar文件的正确方法是什么?

我试过的是这个:

  • 使用maven-dependency-plugin项目的pom.xml文件中的*.dsl.jar文件从maven存储库下载到./lib/目录中。这在构建过程中尽早完成:在maven validate phase
  • MANIFEST.MF中:将jar添加到类路径中:例如Bundle-ClassPath: ., lib/value-2.5.6-annotations.jar
  • build.properties:将它添加到bin.includes

问题是,只有当我两次调用mvn install时,构建才有效。

第一次,.jar文件按预期(在构建过程的早期)下载到lib目录,但随后构建失败,因为它无法解析我的jar file中的类型。 当我再次运行mvn install.jar文件现在已经存在于构建之前的lib目录中)时,它工作正常。

任何想法如何解决这个问题?

maven xtext maven-dependency-plugin
1个回答
0
投票

Short answer

目前它没有按预期工作,因为Tycho的错误

Long answer

以下是我在xxx.dsl项目中所做的工作(现在):

pom.hml fille

  1. 我使用maven-dependency-pluginmaven validate phase中的jar文件(尽可能早在构建中)下载到lib目录。
  2. 请注意,我使用stripVersion=true,以便lib目录中的文件称为value-annotations.jar(而不是value-2.5.6-annotations.jar)。如果我以后想要更新版本,我只需要在pom.xml文件中的一个位置更新它。
  3. jar文件也必须指定为依赖项,因为否则dsl插件的用户无法构建项目:即generateXtextxtext-gradle-plugin任务将失败,因为它无法在jar文件中找到类。

相关的pom.xml代码:

<project ...>
    <properties>
        <xtextVersion>2.13.0</xtextVersion>
        <immutablesVersion>2.5.6</immutablesVersion>
        ...
    </properties> 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.0.2</version>
                <executions>
                    <execution>
                        <id>copy-libraries</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.immutables</groupId>
                                    <artifactId>value</artifactId>
                                    <version>${immutablesVersion}</version>
                                    <classifier>annotations</classifier>
                                    <outputDirectory>lib</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                            <stripVersion>true</stripVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        ...
    </build>
    <dependencies>
        <dependency>
            <groupId>org.immutables</groupId>
            <artifactId>value</artifactId>
            <version>${immutablesVersion}</version>
            <classifier>annotations</classifier>
        </dependency>
    </dependencies>
</project>  

META-INF / MANIFEST.MF文件

  1. 将jar文件添加到Bundle-ClassPath,以便我们可以使用它:例如在DslJvmModelInferrer.xtend
  2. 将jar文件的包添加到Export-Package,以便xxx.dsl.tests项目可以访问这些文件

MANIFEST.MF的相关部分:

Bundle-ClassPath: ., lib/value-annotations.jar
Export-Package: xxx.xtext,
 ...
 xxx.xtext.validation,
 org.immutables.value

build.properties文件

将jar文件添加到bin.includes,以便将其复制到生成的jar文件(在target目录中):

bin.includes=model/generated/,\
               .,\
               META-INF/,\
               lib/value-annotations.jar,\
               plugin.xml

建立

现在构建在Eclipse中工作。

在命令行上(以及在我的持续集成服务器脚本中),我必须执行两次maven(因为提到的错误):

  • mvn verify(下载罐子)
  • mvn install
© www.soinside.com 2019 - 2024. All rights reserved.