如何将npm-package用作maven依赖项?

时间:2019-07-11 06:39:29

标签: maven npm

我想在Java Maven项目中使用npm包。

这只是Java项目中使用的一个文件。

我们有两个项目。

  1. 反应前端项目,其中bundle.js是随Maven上传的工件

  2. java maven项目,其中我们将bundle.js用作maven依赖项

现在,我们要摆脱React项目中的Maven内容。

因此,我们将bundle.js作为npm包上传到我们的npm注册表中。

我们将nexus3用于我们的npm和Maven存储库。

我想避免在Java项目中添加maven插件,以通过真正的npm安装来安装npm软件包。

也许是某种用于maven的npm maven代理插件,还是nexus3中存在一种npm maven代理的可能性?

谢谢!

2 个答案:

答案 0 :(得分:1)

有一个新鲜的maven插件可以执行诸如从NPM获取资源,过滤并打包到JAR:WAR:https://github.com/OrienteerBAP/JNPM

之类的操作。

pom.xml的示例

<plugin>
<groupId>org.orienteer.jnpm</groupId>
    <artifactId>jnpm-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <executions>
        <execution>
            <goals>
                <goal>install</goal>
            </goals>
            <configuration>
                <packages>
                    <package>vue@2.6.11</package>
                    <package>vuex@~3.4.0</package>
                </packages>
            </configuration>
        </execution>
    </executions>
</plugin>

答案 1 :(得分:0)

我们现在通过以下Maven plugin的修改版本解决了这个问题。

这使我们可以将我们的私有npm注册表用于基本身份验证。

使用该插件,我们可以将Java项目中的npm软件包下载到目标目录:

<plugin>
    <groupId>org.mule.tools.javascript</groupId>
    <artifactId>npm-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>fetch-modules</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/npmpackages</outputDirectory>
                <npmRepositoryBase>${npm.repositoryUrl}</npmRepositoryBase>
                <username>${npm.username}</username>
                <password>${npm.password}</password>
                <packages>
                    <package>ourfont:1.0.1</package>
                </packages>
            </configuration>
        </execution>
    </executions>
</plugin>

接下来,我们使用maven-resources-plugin在同一阶段将文件复制到src目录,并每次覆盖以确保其版本正确:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <overwrite>true</overwrite>
                <outputDirectory>${basedir}/src/main/webapp/fonts</outputDirectory>
                <resources>
                    <resource>
                        <directory>${project.build.directory}/npmpackages/ourfont</directory>
                        <include>ourfont.ttf</include>
                        <include>ourfont.svg</include>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

插件的全局配置在我们的maven-settings.xml中完成,该文件可在每种环境下使用:

<profil>
    ...
    <properties>
        <npm.repositoryUrl>https://nexus......com/repository/npm-group/</npm.repositoryUrl>
        <npm.username>service.account@......com</npm.username>
        <npm.password>......</npm.password>
    </properties>
</profil>