質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.00%

  • Java

    12163questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1476questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring

    579questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • GlassFish

    65questions

    GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

eclipse4.3+spring4-1-6+Maven+glassfish3.1環境で外部jarがデプロイ対象から漏れる

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 301

gcodeb2

score 2

JAVAでの開発初心者です。

現在、以下の環境で開発を行っています。
windows7 
・eclipse4.3 kepler
・spring 4-1-6
・Maven
・glassfish3.1

外部jarがデプロイの対象から漏れている状態です。
ビルドはできるのですが、ローカルのglassfishにデプロイした結果に
外部jarが反映されません。

起動すると以下のメッセージがコンソールに表示され動作しない状態です。

イメージ説明

いろいろ調べた結果、
[プロジェクト右クリック]→[プロパティー]→[デプロイメント・アセンブリー]に外部jarを登録すれば解決するとあったため実施したのですが、症状は同じのままです。

イメージ説明

また、[ウィンドウ]→[設定]→[java]→[ビルド・パス]→[ユーザライブラリー]にも外部jarは追加しています。

イメージ説明

他に何か足りないものがあるのでしょうか。

ちなみに、
[プロジェクト右クリック]→[プロパティー]→[デプロイメント・アセンブリー]から外部jarを除去すると、[問題]に以下のメッセージが表示されます。

クラスパス・エントリー org.eclipse.jdt.USER_LIBRARY/[外部jar] は、エクスポートまたは公開されません。実行時に ClassNotFoundExceptions が発生する可能性があります。  

よろしくお願いします。

追記(2017.10.30 17:50)
さまざまなサイトから調査をしたところ、maven-dependency-pluginをpom.xmlに追加すると
良いとありましたが、
maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e. 
とm2eに怒られるうえ、結局WEB-INF/libに対象のjarは無かった。。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2017/10/30 12:42 編集

    外部jarは mvn install:install-file でローカルリポジトリに追加でやらんと

    キャンセル

  • gcodeb2

    2017/10/30 12:46

    ありがとうございます。[プロジェクト右クリック]→[実行]→[maven install]を実行して再度確認してみましたが、同じ現象が発生しました。。。

    キャンセル

  • kuniku

    2017/10/30 19:05 編集

    eclipseの maven intall ではなく、install-file を指定します。のちほど回答を追加します。

    キャンセル

回答 1

checkベストアンサー

0

https://qiita.com/KevinFQ/items/e8363ad6123713815e68
の「サードパーティJARをローカルリポジトリにインストールする。」
のように、外部jarを追加する場合の一例として

apache maven がローカル作業用PCに配置済みとして、

例えば、oracleのjdbcドライバ(けっこう古いやつ)をローカルリポジトリ.m2に置く場合は、

cd jarのある場所
mvn install:install-file -Dfile=ojdbc14-10.2.0.3.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

を実行して、pomファイルに、依存性を追加します。

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc14</artifactId>
    <version>10.2.0.3.0</version>
</dependency>

また、上記とは異なり、ローカルリポジトリにinstallしない場合は
eclisepのプロジェクト直下のディレクトリに、lib ディレクトリを作成し、そこにpostgresql-9.4.1212.jarを置いた場合は
以下のように、systemPathとscopeを設定することで、ローカルリポジトリに置かなくてもmavenの依存性に追加できると思います

        <!-- postgreSQL -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgres</artifactId>
            <version>9.4.0-1212.jdbc4</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/postgresql-9.4.1212.jar</systemPath>
        </dependency>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/30 19:53

    kuniku様
    ありがとうございます。
    <dependency>は頂いた下のパターン<scope>system</scope>の形で追加しています。
    Mavenの依存関係の下に外部jarが入っているのも確認できました。

    mvn install:install-file はコマンドプロンプトから実施するものと思われますが
    'mvn' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    と出てしまいます。どこかmvnが実施できるパスへ移動する必要があると思いますが、どこかご存知でしょうか。

    キャンセル

  • 2017/10/31 08:01

    公式サイトからダウンロードしてもいいのよ apache maven

    キャンセル

  • 2017/10/31 09:05

    asahna1979様
    ありがとうございます。
    mvnコマンドを実施するには、新たなダウンロードが必要なのですね。
    すると、ハードルが上がってしまいます^^; 新たなプログラムのダウンロードには非常に厳しく
    必要性と安全性を説明しないと許可が下りない・・・

    キャンセル

  • 2017/10/31 10:00

    eclispeのpluginでm2e だと、https://qiita.com/yoshi389111/items/34d1ceeff000d41ee44e のようにeclipseからでも、install:install-file できるみたいです。

    キャンセル

  • 2017/10/31 14:40

    kuniku様
    ありがとうございます。頂いたURLを参考に[pom.xml右クリック]→[実行]→[実行の構成]から[Maven build]を選択し[ゴール]を以下として実行したところ、BUILD SUCCESSとなりました。

    install:install-file -Dfile=外部jarのパス(フォルダまで) -DgroupId=外部jar.jar -DartifactId=外部jar.jar -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true

    しかし、状況は変わりませんでした・・・

    キャンセル

  • 2017/10/31 14:58 編集

    状況が変わらないのは、Library not found xxx.jar ということでしょうか?

    現状では、 以下の、a) b) c) の対応くらいしか思いつかないです。 d) は特殊な対応です

    a )eclipseのデプロイメント・アッセンブリーでは、個別指定のjarは外れてますか?

    b )eclipseのパッケージエクスプローラで、maven依存関係のツリー表示で、追加したjarは表示されてますか? 

    c )eclipseのプロジェクトクリック→Maven →プロジェクトの更新 は、試されてますか?

    d) glassfish 側のキャッシュなどの問題かな? eclipse上でのglassfishの設定を再度、し直すのを試したり、glasfishのバックアップをとって、 {インストール先}/domains/domain1 /applications の domain2 等を作成して、domain2側をeclipse側から認識させて利用してみるとか。

    キャンセル

  • 2017/11/01 09:50

    kuniku様
    ありがとうございます。はい、Library not found :が出てしまいます。
    状況をご連携いたします。

    a)デプロイメント・アセンブリーで個別jarは入っています。
    b)パッケージエクスプローラ→プロジェクト右クリック→プロパティ→Javaビルドパス→Maven依存関係に追加したjarは入っています。
    c)プロジェクト右クリック→Maven→プロジェクト更新を試してみました。

    ここまでで、もう一度試しましたが、Library not found :になります。

    dを試してみます。

    キャンセル

  • 2017/11/01 16:50

    他の策を考えてみました

    a) デプロイメント・アセンブリーで個別jarは、mavenの依存関係に入っているのであれば不要と思うので除去する。除去したところで変わらないと思いますが。

    e) javaのビルドパスで、ライブラリの追加→ユーザ・ライブラリー で設定している 外部.jar はmavenの依存関係に追加済みなので、削除してみる

    f) javaのビルドパスで、「ライブラリの追加」→ユーザ・ライブラリー で設定している 外部.jarを、「jarの追加」の方を選択してビルドパスに追加する。jarは、どこかのプロジェクトにjar を置く または プロジェクト直下/lib/外部.jar などで良いです。

    g) glassfishに詳しくないのですが、domains/domain1/lib/外部.jar のように、glassfishそのものに読み込みされるようにする。コンテキスト/WEb-INF/lib として読み込ませない。ただし外部.jar が共有ライブラリとして動くことに対応していることが前提。

    キャンセル

  • 2017/11/02 13:50

    kuniku様
    ありがとうございます。

    上記はまだ試せていないのですが、MavenでpackageしてWarを作成し、別の環境にデプロイしてみたところ、どういうわけか外部Jarを使う機能が正常に使えていました。。。

    なお、昨日急な別件が入ってしまい、試す時間が取れなくなってしまいました。一旦この質問は閉じさせていただきたいと思います。

    kuniku様、いろいろご確認いただきありがとうございました。
    頂戴したご回答を機会を見て試したいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12163questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1476questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring

    579questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • GlassFish

    65questions

    GlassFishは、Java EE準拠のアプリケーションサーバの名称です。