使用命令行启动 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!
- 但主要 class 已在清单文件中指明!
下面的屏幕截图显示主 class 无法加载我想使用的 pom.xml
下面的屏幕截图显示 Manifest 文件包含我想要使用的 pom.xml 的等待信息:
这是我要使用的 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>
这是 运行 没有问题的 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>
我有一个基本的 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!
- 但主要 class 已在清单文件中指明!
下面的屏幕截图显示主 class 无法加载我想使用的 pom.xml
下面的屏幕截图显示 Manifest 文件包含我想要使用的 pom.xml 的等待信息:
这是我要使用的 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>
这是 运行 没有问题的 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>