web-dev-qa-db-ja.com

MavenとEclipse:Maven以外のjarまたは外部jarをプロジェクトに追加する信頼できる方法ですか?

Mavenは素晴らしい。 pom構成で依存パッケージのバージョンを指定し、それらを自動的に適用することにより、ほとんどjar依存関係を回避できます。また、m2eを介したEclipseとの優れた統合があり、IDEでシームレスに機能します。

これはすべて、Mavenにグローバルに知られている依存関係に最適です。ただし、Mavenリポジトリで利用できないプロジェクトに含める必要のあるライブラリが存在する場合があります。この場合、通常はプロジェクトのlib/ディレクトリに追加します。クラスパスにある限り、物事はコンパイルされます。

ただし、問題は、プロジェクトをインポートするときに自動的に含まれるようにすることです。私は、あまりにも長い間、中途半端な修正とハッキングでこの問題を容認してきました。誰かがこのプロジェクトをインストールするたびに、lib/のjarをEclipseビルドパスに手動で追加して、すべてのエラーがなくなるように指示する必要があります。次のようなもの:

enter image description here

私はmvnコマンドラインプログラムとEclipseの両方で動作する方法でこのプロセスを自動化する方法を探しています。Eclipseに重点を置いています。 。

このためにレポジトリサーバーを設定したくはありません。また、ローカルでの設定を保証する独自のコンポーネントも所有していません。開発者がMavenを使用しないjarファイルがいくつかあります。そして、私はそれらでコンパイルしたい...私はちょうど私のソフトウェアのディストリビューションにそれらを含めることができるはずです?

これを実装するための合理的な方法を本当に探しています。これは大騒ぎせずにEclipseでも機能します。 これは1つの解決策です 私は有望であることがわかりましたが、この問題に対する信頼できる解決策は間違いないようです。近づいて来る他の唯一のものは maven-addjars-plugin です。これは問題なく機能しますが、コマンドラインでのみ機能します。このプラグインは悪くなく、かなり合理的な構成です:

<plugin>
    <groupId>com.googlecode.addjars-maven-plugin</groupId>
    <artifactId>addjars-maven-plugin</artifactId>
    <version>1.0.5</version>
    <executions>
        <execution>
            <goals>
                <goal>add-jars</goal>
            </goals>
            <configuration>
                <resources>
                    <resource>
                        <directory>${project.basedir}/lib/Java-aws-mturk</directory>
                    </resource>
                    <resource>
                        <directory>${project.basedir}/lib/not-in-maven</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

ただし、Eclipseで実行するには、pom.xmlにライフサイクルマッピングに関する次の混乱を追加する必要があります。 Eclipseビルドパスに実際に何かを追加するように構成されているとは思いません。

<pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
            <groupId>org.Eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>
                                    com.googlecode.addjars-maven-plugin
                                </groupId>
                                <artifactId>
                                    addjars-maven-plugin
                                </artifactId>
                                <versionRange>
                                    [1.0.5,)
                                </versionRange>
                                <goals>
                                    <goal>add-jars</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>
30
Andrew Mao

1)システムスコープの依存関係を使用できます

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/x.jar</systemPath>
    </dependency>

2)x.jarをローカルのMavenリポジトリに次のようにコピーできます。

repository/test/x/1.0/x-1.0.jar

として依存関係を追加します

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
    </dependency>
61

Mavenを使用して、以下のようにmaven-install-pluginを使用して、project\libフォルダーからローカルリポジトリにファイルをインストールできます。 JDBCドライバーを使用してこれを実行したことがあります。専用のpomを作成し、mvn -f installdeps.pomまたはそのようなもので実行する必要がある場合があります。

Niceを再生し、validateなどのライフサイクルにバインドできる場合、m2eプラグインをEclipseで使用できます。Niceを再生し、pom.xmlから依存関係を直接読み取り、必要に応じてjarをインストールします。ローカルレポ。

    <plugin>
        <!-- We dont want children attempting to install these jars to the repo. -->
        <inherited>false</inherited>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
            <execution>
                <id>Microsoft JDBC Driver File 1</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/sqljdbc4.jar</file>
                    <groupId>com.Microsoft</groupId>
                    <artifactId>Microsoft-jdbc-driver</artifactId>
                    <version>4.0</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
            <execution>
                <id>ojdbc5</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/ojdbc5.jar</file>
                    <groupId>com.Oracle</groupId>
                    <artifactId>ojdbc5</artifactId>
                    <version>11.1.2</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
        </executions>
    </plugin>
6
Javanator

Maven Resources Plugin を使用してこれを行うことができるように思えます。リソースのコピーを適切なライフサイクルフェーズ(コンパイル前のフェーズ)にバインドするだけです。ほとんどの場合、maven-compiler-pluginを微調整して、コンパイル時および実行時にこれらのライブラリがクラスパス上にあるようにする必要があります。

0
Muel