使用命令行启动 DropWizard 服务器:我只想使用 maven jar 插件

Start DropWizard server with command line : i want to use maven jar plugin only

我有一个基本的 dropwizard 网络应用程序(REST 服务)。我想使用 maven-jar-plugin(下面第一个 pom.xml)而不是编辑建议的 maven shade 插件(下面第二个 pom.xml)来执行服务器。这只是 dropwizard 的建议,所以我认为这不是强制性的。我错了吗?

执行该基本 dropwizard 网络应用程序的命令行是:

java -jar target/MavenSimpleArtifact-0.0.1-SNAPSHOT.jar server introduction-config.yml

但是,当我 运行 使用 CLI 命令启动应用程序时,会发生什么:

下面的屏幕截图显示主 class 无法加载我想使用的 pom.xml

下面的屏幕截图显示 Manifest 文件包含我想要使用的 pom.xml 的等待信息:

  1. 这是我要使用的 pom.xml,但该 CLI 命令会生成错误:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>MavenSimpleGroupe</groupId>
    <artifactId>MavenSimpleArtifact</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <mainclass>com.dropwizard.introduction.IntroductionApplication</mainclass>
        <dropwizard.version>2.0.0</dropwizard.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-core</artifactId>
            <version>${dropwizard.version}</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>                          
                            <addClasspath>true</addClasspath>
                            <mainClass>${mainclass}</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  2. 这是 运行 没有问题的 pom.xml

它正在使用“maven shade 插件”,但我不想使用它!!

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenSimpleGroupe</groupId>
<artifactId>MavenSimpleArtifact</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <mainclass>com.dropwizard.introduction.IntroductionApplication</mainclass>
    <dropwizard.version>2.0.0</dropwizard.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>dropwizard-core</artifactId>
        <version>${dropwizard.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>${mainclass}</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

所以有人可以帮助我了解发生了什么。

这是 github 存储库 link 到应用程序 HERE

您的 java -jar ... 命令失败,因为您在运行时没有必要的类路径条目。您需要收集所有依赖项(为此我们使用 maven-assembly-plugin)并将它们作为 -classpath/-cp/CLASSPATH 参数传递,或者如您已经提到的,使用阴影将所有需要的依赖项合并到生成的 jar 中的插件。

如果我想使用“maven-jar-plugin”,我必须使用“maven-dependency-plugin”。 这样就可以了。它之所以有效,是因为 Maven 将依赖的 jar 复制到目标文件夹中,文件夹名称为“dependency”。

在运行申请之前:

  • 复制粘贴下面pom.xml
  • 更新maven项目(在eclipse中右击>更新)
  • 在控制台中,键入:mvn clean package

然后,始终在控制台中,运行 使用以下命令行的应用程序:

java -cp target/MavenSimpleArtifact-0.0.1-SNAPSHOT.jar:target/dependency/* com.dropwizard.introduction.IntroductionApplication

这里是对应的 pom.xml :

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenSimpleGroupe</groupId>
<artifactId>MavenSimpleArtifact</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <dropwizard.version>2.0.0</dropwizard.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>dropwizard-core</artifactId>
        <version>${dropwizard.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>