64

Spring Boot アプリケーションがあり、そこから Jar を作成しました。以下は私のものpom.xmlです:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-java8time</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- WebJars -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6.2</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

この Jar を他のアプリケーションで使用したいので、この jar をアプリケーションに追加しました。しかし、そのJarでメソッドを呼び出すと、ClassNotFoundException.

この問題を解決するにはどうすればよいですか? Spring Boot JAR に依存関係を追加するにはどうすればよいですか?

4

11 に答える 11

2

プロジェクトは maven-assembly-plugin で拡張できます

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
        <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        </configuration>
        <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
            <goal>single</goal>
            </goals>
            </execution>
        </executions>
</plugin>

ビルド後、3 つの jar を取得します。主なものは通常の Maven プロジェクトと同じですが、2 つ目は分類子に exec が追加され、実行可能な JAR になります。3 番目の jar 名は jar-with-dependencies によって追加され、Spring Boot アプリケーション (spring-boot-starter-web、thymeleaf など) に依存関係として追加されたクラスを持つクラスが含まれるため、の pom にそのプロジェクトを依存関係として追加するアプリケーションでは、Spring Boot プロジェクトから依存関係を追加する必要はありません。

于 2018-02-04T10:38:34.087 に答える
2

@Tunakiが述べたことはほとんど正しいですが、元の質問に基づいて欠けている部分は次のとおりです。

これは ClassNotFoundException をスローします。Spring Boot アプリケーションで使用される外部 jar がありません。

これは、maven パッケージから作成された FatJAR には、Spring Boot がアプリケーションを実行する方法で機能する特定の場所に指定された依存ライブラリがあるためです。JARを別のアプリケーションのクラスパスに追加するだけの場合は、@Tunakiが言ったことを実行し、依存するJARファイルもクラスパスに含める必要があります。これを処理する最善の方法は、Mojo を具体的にターゲットとするMaven 依存関係プラグインdependency:copy-dependenciesを使用して、他のアプリケーションをコンパイルするときにライブラリ パスとして指定できるフォルダーにすべての依存関係をダウンロードすることです。

于 2016-10-18T06:37:58.293 に答える