2016-01-09 12 views
5

私のMavenプロジェクトは、以下の構造を有する:Mavenのモジュール間のJavaScriptコードを共有する方法

  • "ベース" モジュール - Javaファイル を共有含まれています - 共有含まれている必要がありますJavaScriptファイルを
  • モジュール1 - 共有Javaファイルを依存関係として使用する - 共有javascriptファイルを使用する必要がありますか?
  • モジュール2 - 共有Javaファイルを依存関係として使用する - 共有javascriptファイルを使用する必要がありますか?

現在、webpackはjavascriptパッケージでは新しいようですが、npmは適切なパッケージマネージャーのようです。ベースモジュールのWebPACK 使用(NPMパックで)NPMバンドルを作成する - - 手動NPMパッケージは

であるベースモジュール対象フォルダへの相対パスを使用して、このバンドルをモジュール1および2インストールしますので、私は、次の試みなぜnpmを公開しないのですか? - 公開されているnpmパッケージを更新できないため、すべてのビルドで新しいバージョン番号を作成する必要があります - ビルドにはインターネット接続が必要です

その他のオプションはありますか? - 私はMavenリソースプラグインを使用することを考えましたが、これは手作業(ファイル名、フォルダなど)の多くが含まれているようです

私は何を求めているのですか?同じプロジェクト内でモジュールを作ることはできますか?それをどうやって達成するのですか?これを行うにはよりよい方法が必要ですか?

あなたは私のプロジェクトを見たい場合は、ここで見てみましょう:あなたの答えのコメントを事前にhttps://github.com/stefanrinderle/softvis3d

感謝を!

+1

私はhttps://maven.apache.org/plugins/maven-remote-resources-plugin/が役に立つと思いますが、あなたの例が理解できないほど簡単なので、完全な答えを与えることはできません。非常に基本的な例(Mavenマルチモジュール、3-4プロジェクト、1つのJSファイルなど)を追加し、期待を明確にすることを検討してください – michaldo

+0

OPはあなたに彼のgithubリポジトリへのフルアクセスを与えてくれたと思います... –

+0

@RajaAnbazhagan、レポへのアクセス。私はhttp://stackoverflow.com/help/mcveに従って準備の例を提案した(とにかく、問題は解決されるので、ケースは閉じている) – michaldo

答えて

4

基本的にnpmモジュールを別々に再配布するには、npm publishを使用する必要があります。しかし、devの時間中、npmはローカルのフォルダをグローバルな依存関係としてリンクし、npmがリポジトリからダウンロードするのではなく、それを使うようにする素晴らしい機能npm linkを持っています。したがって、私はちょうどあなたのプロジェクトにnpm linkを追加し、すべてのサブモジュールが同じノードインスタンスを使用するようにノードインストールディレクトリを変更しました。この方法でモジュールを簡単に開発し、準備ができたらいつでも公開することができます。

基地/のpom.xml:

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 
    ... 
    <configuration> 
    ... 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <id>npm link</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link</arguments> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

..module /のpom.xml

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 

    <configuration> 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <!-- link before install --> 
     <id>npm link softvis3d-viewer</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link softvis3d-viewer</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>npm install</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
    </execution> 
    ... 
    </executions> 
</plugin> 

..module/package.jsonは

"devDependencies": { 
    ... 
    "softvis3d-viewer": "0.0.4-SNAPSHOT" 
    }, 

my commit

で詳細を見ます
+0

これは本当に良いオプションだ。私はnpmリンクについて知らなかったし、私はすでに良い方法でいたようだ。コミットを提供してくれてありがとう、それはすでにメインプロジェクトに統合されています。 – user984200

0

NPMはMavenモジュールは、翻訳/縮小/連結を行うJavaScriptを提供します。プリコンパイルされたモジュールを共有する必要がある場合は、web-fragment.xml(Servlet 3.0仕様で定義されています)を使用して、JavaScriptなどをMETA-INF/resourcesの下に置きます。フロントエンドの技術によっては、コード分割やWebコンポーネントに関するいくつかのアプローチを使用する必要があります。

本質的に、クライアントサイドは、それに依存するものを実行する前に、ライブラリコードをロードして実行する必要があります。

Mavenモジュール間で共有したい特定のAPIを持つ小さな(-ish)ライブラリがあり、それがすべて同じエコシステムの一部である場合は、npm publishnpm linkの方法があります。より大きな機能のチャンク、特に特定の使用プロファイル(たとえば、ユーザープロファイルエディタまたは設定ページ - 毎回使用されていない)を持つものは、動的にロードできます。

この領域(POM、JAR、NPM、JS/ES6モジュール)は新しいものではありませんが、最善の方法を模索しているようで、いくつかの堅牢な技術を解決するには時間がかかります。私はそれを処理するためのきれいな、まったくのバンドエイド、規則と設定を知らない。

関連する問題