dubbo找不到或无法加载主类 org.apache.dubbo.container.Main

使用maven-assembly-plugin 打一个tar.gz包。然后允许Dubbo官方的start.sh发现报错如下:

找不到或无法加载主类 org.apache.dubbo.container.Main

我们来看下start.sh

nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS org.apache.dubbo.container.Main > $STDOUT_FILE 2>&1 &

这里使用的参数-classpath, 说明可能问题发生在依赖的所有的jar的路径上。
我把实际命令打印出来试试

java -classpath /Users/frank/all/tech/dubbo/dubbo-demo/dubbo-demo-provider/target/dubbo-demo-provider-2019-08-25T10:56:02Z/lib/dubbo-2.7.1.jar:/Users/frank/all/tech/dubbo/dubbo-demo/dubbo-demo-provider/target/dubbo-demo-provider-2019-08-25T10:56:02Z/lib/dubbo-demo-provider-1.0-SNAPSHOT.jar

而dubbo-demo-provider-2019-08-25T10:56:02Z/lib 这个文件夹本身包含了冒号,而java的classpath刚好也是使用冒号来隔开多个文件路径, 导致一个正确的路径被分割成了三个非法的路径

dubbo-demo-provider-2019-08-25T10
56
02Z/lib

明显 56 和02Z根本不是文件路径,问题出在这个以时间戳命名的路径上。

原因是

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/resources/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <finalName>${project.build.finalName}-${maven.build.timestamp}</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

问题在${maven.build.timestamp}
生成了xxxx.tar.gz (命名带时间戳里的冒号)

需要去掉改成

<configuration>
                    <descriptors>
                        <descriptor>src/main/resources/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <finalName>${project.build.finalName}</finalName>
                </configuration>

这样就ok了。

答案揭晓

tar.gz文件命名千万不要含有冒号,否则解压后的文件夹也会含有冒号,这样,java -classpath执行的时候,会拼接上错误的路径,导致找不到正确的jar,导致找不到主类org.apache.dubbo.container.Main

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值