私は戦争に依存しています:
<dependency>
<groupId>my.package</groupId>
<artifactId>myservices</artifactId>
<version>0.3</version>
<type>war</type>
</dependency>
現在、これは私のローカルリポジトリに存在し、クラスはWEB-INF/classes/my/package/myservices
に存在します。しかし、myservices
を使用しようとすると、パッケージmy.package
が存在しません。 Intelli-Jはmyservices
をmy.package.myservices
に変更することを知っていますが、import
を試みてもまったく機能しないようです。
この戦争依存関係で私がしなければならない特別なことはありますか?
それはそのようには機能しません。 WARファイルはクラスパスに配置されることは想定されていませんが、特別な構造を処理できるアプリケーションサーバー(またはサーブレットコンテナ)にデプロイされます。
もちろん、Java warファイルを処理できるカスタムクラスローダーはどこかにあるでしょうが、それはそれを行う方法ではありません。
コードをjarに保存し、jarを戦争とこのアプリケーションに含めます。ただし、EARファイルを作成する場合を除いて、依存関係としてwarを使用しないでください。
他の回答で指摘されているように:
ただし、何らかの理由でWARプロジェクトを分割できない、または分割したくない場合は、WARに加えてJARアーティファクトが必要であることをMavenに通知することもできます。これをWARプロジェクトのPOMに入れます。
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
</plugins>
</build>
次に、WARプロジェクトをビルドするときに、MavenはそこからWARおよびJARを作成します。
doc_180のコメントから採用されているため、見落とされません。
WARの依存関係は、MavenによってJARの依存関係とは非常に異なる方法で処理されます。それらはオーバーレイとして扱われます。
http://maven.Apache.org/plugins/maven-war-plugin/overlays.html
あなたが探しているのは、WARオーバーレイとは少し違うものだと思います。 WARオーバーレイは、ファイル構造を「最も近い勝利」モデルとマージしますが、これは、web.xmlのようなものが、マージされずに最も近い勝利に置き換えられることを意味します。
マージが必要な場合(これは、ほとんどの人がWARの依存関係について話し始めたときに考えるものに近い)、Cargouberwarプラグインを確認する必要があります。
http://cargo.codehaus.org/Merging+WAR+files
単に2つのWAR間でいくつかのクラスを共有することが目標である場合は、おそらくそれらのクラスをJARプロジェクトに配置する必要があります。特にMavenは、pom.xml->単一のアーティファクトモデル(JAR/WAR/etc)で動作するように実際に設計されています。単一のpom.xmlを取得して、たとえば、あるものにはJARを、他のものにはWARを出力させようとすると、非常に苦痛になります。
ちなみに、1人以上のチームで作業している場合は、アーティファクト管理サーバー(Artifactory、Nexus、Archivaなど)をかなり高速に処理する必要があります。そうしないと、このような処理に夢中になります。 ;)
WARでは、クラスはWEB-INF/classes/...
ではなくclasses/...
に配置する必要があります。
とにかく、私はWAR(JARではない)から他のクラスを参照しようとしたことがなく、これが可能かどうかはわかりません。
依存関係がローカルリポジトリにインストールされていることを確認してください。
ローカルリポジトリは次のようになります。
.m2/my/package/myservices/0.3/myservices-0.3.war
そうでない場合は、依存関係で使用する前に、warをローカルリポジトリにインストールしてください。
mvn install:install-file -Dfile="[path-to-war]" -DgroupId=my.package -DartifactId=myservices -Dversion=0.3 -Dpackaging=war -DcreateChecksum=true -DgeneratePom=true