我想在Java Maven项目中使用npm包。
这只是Java项目中使用的一个文件。
我们有两个项目。
反应前端项目,其中bundle.js是随Maven上传的工件
java maven项目,其中我们将bundle.js用作maven依赖项
现在,我们要摆脱React项目中的Maven内容。
因此,我们将bundle.js作为npm包上传到我们的npm注册表中。
我们将nexus3用于我们的npm和Maven存储库。
我想避免在Java项目中添加maven插件,以通过真正的npm安装来安装npm软件包。
也许是某种用于maven的npm maven代理插件,还是nexus3中存在一种npm maven代理的可能性?
谢谢!
答案 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>