java 构建工具maven和jar文件
java build tool maven and jar file
我是 JAVA 的新手,想要 运行 来自在线的示例程序。
我从 github 下载了一个包 https://github.com/yiming187/curator-example
我使用命令 mvn package
编译了它。
结果显示 BUILD SUCCESS.
[vagrant@bb720864d128 curator-example]$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building curator-example 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ curator-example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /vagrant/curator-example/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ curator-example ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ curator-example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /vagrant/curator-example/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ curator-example ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ curator-example --
-
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ curator-example ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.767s
[INFO] Finished at: Tue Oct 27 22:27:29 UTC 2015
[INFO] Final Memory: 8M/237M
[INFO] ------------------------------------------------------------------------
然后我转到一个目标文件并找到了 curator-example-0.0.1-SNAPSHOT.jar。我试过 运行 其中一个例子。但是没用。
java -cp curator-example-0.0.1-SNAPSHOT.jar com/ctrip/zk/curator/example/DistributedIdQueueExample
输出:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
CuratorFramework cannot be resolved to a type
DistributedIdQueue cannot be resolved to a type
CuratorFrameworkFactory cannot be resolved
ExponentialBackoffRetry cannot be resolved to a type
CuratorListener cannot be resolved to a type
CuratorFramework cannot be resolved to a type
CuratorEvent cannot be resolved to a type
QueueConsumer cannot be resolved to a type
The method createQueueConsumer() from the type DistributedIdQueueExample refers to the missing type QueueConsumer
QueueBuilder cannot be resolved to a type
QueueBuilder cannot be resolved
The method createQueueSerializer() from the type DistributedIdQueueExample refers to the missing type QueueSerializer
CloseableUtils cannot be resolved
CloseableUtils cannot be resolved
at com.ctrip.zk.curator.example.DistributedIdQueueExample.main(DistributedIdQueueExample.java:20)
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>com.ctrip.zk</groupId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<artifactId>curator-example</artifactId>
<name>curator-example</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
</project>
您缺少 curator-recipes JAR(a.k.a 依赖项)。一般来说,打包 jar
的 POM 会生成适合包含在其他项目中的 jar,因此它不适合独立 运行ning.
如果你想从命令行 运行 它,你需要一个所谓的 "jar-with-dependencies",一个特殊的包装,其中所有的依赖项(直接的和传递的)都包含在你的最终版本中神器。
将此添加到您的 <build />
节点中:
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!--
<archive>
<manifest>
<mainClass>package.and.name.of.main.class</mainClass>
</manifest>
</archive>
-->
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
注意我把<archive />
部分注释掉了,仅供参考。
如果你真的有一个 main class,你可以在那里指定它,然后你可以 运行 你的项目 java -jar <jar-file>
,MANIFEST 会告诉 Java [=15] 在哪里=]方法。
策展人示例 pom 不包含策展人框架 jar,这很奇怪。因为缺少的 类 不在 curator-recipes jar 中,所以它们在 curator-framework jar 中。我想 recipe jar 将框架 jar 作为依赖项引入。
尝试将依赖项更改为以下内容,然后重新编译:
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
然后运行我放在评论里的最后一个java命令。
我是 JAVA 的新手,想要 运行 来自在线的示例程序。
我从 github 下载了一个包 https://github.com/yiming187/curator-example
我使用命令 mvn package
编译了它。
结果显示 BUILD SUCCESS.
[vagrant@bb720864d128 curator-example]$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building curator-example 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ curator-example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /vagrant/curator-example/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ curator-example ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ curator-example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /vagrant/curator-example/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ curator-example ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ curator-example --
-
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ curator-example ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.767s
[INFO] Finished at: Tue Oct 27 22:27:29 UTC 2015
[INFO] Final Memory: 8M/237M
[INFO] ------------------------------------------------------------------------
然后我转到一个目标文件并找到了 curator-example-0.0.1-SNAPSHOT.jar。我试过 运行 其中一个例子。但是没用。
java -cp curator-example-0.0.1-SNAPSHOT.jar com/ctrip/zk/curator/example/DistributedIdQueueExample
输出:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
CuratorFramework cannot be resolved to a type
DistributedIdQueue cannot be resolved to a type
CuratorFrameworkFactory cannot be resolved
ExponentialBackoffRetry cannot be resolved to a type
CuratorListener cannot be resolved to a type
CuratorFramework cannot be resolved to a type
CuratorEvent cannot be resolved to a type
QueueConsumer cannot be resolved to a type
The method createQueueConsumer() from the type DistributedIdQueueExample refers to the missing type QueueConsumer
QueueBuilder cannot be resolved to a type
QueueBuilder cannot be resolved
The method createQueueSerializer() from the type DistributedIdQueueExample refers to the missing type QueueSerializer
CloseableUtils cannot be resolved
CloseableUtils cannot be resolved
at com.ctrip.zk.curator.example.DistributedIdQueueExample.main(DistributedIdQueueExample.java:20)
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>com.ctrip.zk</groupId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<artifactId>curator-example</artifactId>
<name>curator-example</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
</project>
您缺少 curator-recipes JAR(a.k.a 依赖项)。一般来说,打包 jar
的 POM 会生成适合包含在其他项目中的 jar,因此它不适合独立 运行ning.
如果你想从命令行 运行 它,你需要一个所谓的 "jar-with-dependencies",一个特殊的包装,其中所有的依赖项(直接的和传递的)都包含在你的最终版本中神器。
将此添加到您的 <build />
节点中:
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!--
<archive>
<manifest>
<mainClass>package.and.name.of.main.class</mainClass>
</manifest>
</archive>
-->
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
注意我把<archive />
部分注释掉了,仅供参考。
如果你真的有一个 main class,你可以在那里指定它,然后你可以 运行 你的项目 java -jar <jar-file>
,MANIFEST 会告诉 Java [=15] 在哪里=]方法。
策展人示例 pom 不包含策展人框架 jar,这很奇怪。因为缺少的 类 不在 curator-recipes jar 中,所以它们在 curator-framework jar 中。我想 recipe jar 将框架 jar 作为依赖项引入。
尝试将依赖项更改为以下内容,然后重新编译:
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
然后运行我放在评论里的最后一个java命令。