昨天碰到一个让我很崩溃的问题。我在我的java程序里面调用MavenCli的API来执行一个maven命令。在Eclipse中运行一切正常。然后我用maven assebly把程序打成一个包含dependency的jar包,用java -jar 命令来执行这个程序的时候,却死活不工作了,出现以下的Exception:
org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) No implementation for org.eclipse.aether.RepositorySystem was bound.
while locating org.apache.maven.artifact.resolver.DefaultArtifactResolver
at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
while locating org.apache.maven.artifact.resolver.ArtifactResolver
while locating org.apache.maven.repository.legacy.LegacyRepositorySystem
at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
while locating org.apache.maven.repository.RepositorySystem
......
从这些错误看起来,像是少了什么Dependency。所以我就以为是Maven的Dependency有版本冲突,花了很多时间来替换测试,结果一点都没有用。
后来在绝望之下,我只能尝试用maven exec:java的命令来运行这个程序。Bingo,工作了!后来跟同事交谈,了解到Assembly把Dependency的class文件全部打到jar里,有些情况下可能会导致class的冲突。下次知道了,如果还碰到这种情况,记得用maven exec:java命令来试试哦。
P.S.以下是我用来打包的maven assembly配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.ebay.raptor.tools.DependencyValidator</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
相关推荐
1. 使用EditPlus打开一个Java源文件(例如:`HelloWorld.java`)。 2. 在源文件中输入简单的Java代码: ```java public class HelloWorld { public static void main(String[] args) { System.out.println(...
最后是使用java命令运行这个字节码文件。Java程序的执行依赖于JVM,通过JVM来解释和执行字节码文件。 Java的两个核心机制是JVM和垃圾回收机制。JVM负责管理Java程序的执行环境和生命周期,垃圾回收机制是Java内存...
为了运行Java程序,你需要使用JDK中的javac编译源代码,然后用java命令运行编译后的字节码文件。如果文件是源代码,你可以使用IDE(如Eclipse, IntelliJ IDEA)或文本编辑器进行编辑,然后通过集成的构建工具(如...
Eclipse,作为一个流行的Java集成开发环境(IDE),提供了丰富的功能和扩展性。然而,对于大型项目,仅仅依靠Eclipse的内置功能可能不足以满足复杂的构建需求,这就是Maven 2.0插件的重要性所在。这个插件将Maven的...
Eclipse是一款广泛使用的Java集成开发环境,其丰富的功能和可定制性使得熟练掌握它能显著提升程序员的工作效率。以下是一些提高Eclipse使用效率的好习惯和快捷键操作: 1. **切换编辑点**:通过Alt + 和 Alt + -> ...
【简易电子词典(Java)】是一个基于Java编程语言实现的简单词汇查询工具,它允许用户在命令行界面中执行单词查询和添加等基本操作。这个项目为初学者提供了了解和实践面向对象编程、文件处理以及用户交互设计的平台...
然后 Eclipse 会调用 java 命令来运行此字节码文件。因为字节码中的字符总是 UNICODE 格式,所以 java 读取字节码文件并没有编码转换过程。虚拟机读取文件后,字符数据便以 UNICODE 格式存储在内存中了。 3. 调用 ...
1. **创建Java项目**:首先,你需要有一个完整的Java项目,包括主类(包含main方法)和其他相关类。 2. **编译Java源代码**:使用`javac`命令编译源代码,确保所有类都成功编译为.class文件。 3. **生成jar文件**...
解释性是Java的另一个特性,它通过预编译源代码为字节码,使得在运行时的解释工作更为高效。Java还具备分布式计算的能力,可以方便地处理网络上的对象。在安全性方面,Java有一套严格的机制,防止非法内存访问和权限...
### Editplus配置Java环境知识...对于初学者而言,使用EditPlus作为Java编程工具是一个非常实用的选择。随着编程技能的提高,可以考虑使用更加强大的集成开发环境(IDE)如Eclipse或IntelliJ IDEA来进一步提高开发效率。
- **运行**:使用java命令执行编译后的字节码,运行Java程序。 - **调试与测试**:使用调试工具查找并修复程序中的错误,通过单元测试确保程序质量。 #### 五、总结 Java不仅仅是一种编程语言,它还是一个全面的...
例如,在Windows中,`JAVA_HOME`指向JDK的安装路径,`CLASSPATH`包含JDK库,`Path`添加JDK的`bin`目录,以便系统能够找到Java命令。 7. **Java Application与Java Applet的区别**: - **运行方式**:Java ...
在Java Web开发中,特别是使用MyBatis框架时,频繁地编写DAO层接口(Mapper)以及对应的实体类(Entity)是一项既繁琐又容易出错的工作。为了提高开发效率并减少错误,可以使用MyBatis Generator工具来自动生成这些...
1. **解压缩源码包:** 将下载好的`openfire_src_4_0_1.zip`解压缩到一个合适的文件夹内。 2. **复制配置文件:** 进入解压后的目录,找到特定的三个文件(通常包括构建脚本和项目配置等),并将它们复制到`...
- **PATH**:添加`JAVA_HOME/bin`到PATH变量,以便于在任何目录下执行Java命令。 - **CLASSPATH**:用于指示Java类库的位置,通常包含当前目录(`.`)和JDK的`lib`目录。 Java程序可以接收命令行参数,通过`main`...
安卓自动化测试是为了确保应用在不同设备和环境下正常运行,减少手动测试的工作量和出错概率。主要的测试类型包括功能测试、性能测试、UI测试等。Java是安卓自动化测试的常用编程语言,通过各种测试框架如JUnit、...
掌握Java程序的编译和执行方法是学习的重点,这包括使用javac命令编译源代码,以及使用java命令运行程序。初学者通常会从编写第一个“Hello, World!”程序开始,这涉及到基本的语法结构和程序流程控制。 在学习过程...
了解和掌握Java环境变量的配置不仅能帮助我们顺利进行开发工作,还能在遇到依赖库找不到、程序运行出错等问题时,快速定位并解决。同时,这也是一种基础的系统管理技能,对于深入理解Java的运行机制具有重要意义。