繁体   English   中英

如何从maven项目引用非maven项目(在eclipse工作区中)?

[英]How to reference a non-maven project (in eclipse workspace) from a maven project?

我正在开发一个新项目,它是一个产品的插件。

我使用maven来构建我的插件(zip),但我需要引用在Eclipse工作区中定义的产品的源代码。 但是这个源代码不是由Maven管理的,我不想迁移它。

是否可以通过任何方式引用此工作空间项目? (maven插件,解决方法欢迎)。

Eclipse中的编译只需要依赖项,但不会在插件本身中打包( provided范围)。

我在Eclipse中也有m2e,我想在进行“Maven更新”时保留这个配置。

更新:我正在寻找一个解决方案,它将在命令行上使用mvn clean install ,因为我希望能够从CI平台执行构建(例如Jenkins)

只需使用Project - > Properties - > Java Build Path - > Projects - > Add

如果需要在Eclipse外部编译它,可以在物理jar位置添加依赖项:

 <dependency>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/test.jar</systemPath>
</dependency>

您可以考虑使用antrun插件在链接到编译阶段的外部项目中触发源代码的编译。 您甚至可以将.cl​​ass文件复制到目标文件夹中,以便运行时类路径找到它们

因为我已经编译了源代码而且我不需要重新编译它们(或修改任何东西)我决定使用pom程序集打包它们。

我创建了一个单独的项目(在与我的插件开发项目相同的父项下),类似于openemm-src:

  Parent project (openemm-plugin-dev)
       |- plugin-1
       |- plugin-2
       |- openemm-src 
              |- pom.xml 

openemm-src项目的pom.xml如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>openemm.plugin.dev</groupId>
        <artifactId>plugin</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <artifactId>openemm-src</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>OpenEMM Source Code Library</name>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/src-plugin.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    <xecution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

和文件src/assembly/src-plugin.xml

<assembly>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>build/classes</directory>
            <outputDirectory></outputDirectory>
        </fileSet>
    </fileSets>
</assembly> 

在此之后,我从兄弟姐妹项目中引用了这样的jar:

<dependency>
    <groupId>openemm.plugin.dev</groupId>
    <artifactId>openemm-src</artifactId>
    <version>1.0.0</version>
    <scope>provided</scope>
</dependency>

此解决方案看起来更像是一种解决方法,但这是因为OpenEMM项目没有任何“插件模板项目”可以使用Maven进行管理。

请注意,这只是一个部分配置,我还要引用Agnitas库,它们不包含所有源代码(两者都是编译我的代码所必需的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM