2017-06-23 173 views
0

我正在学习Maven。我与它修修补补,并在这个问题感到震惊,JAR依赖于maven

我有2个Maven项目PROJECT_1和Project_2

PROJECT_1示例代码:

package com.sample; 

public class App 
{ 
public void hello(){ 

    System.out.println("Hello from New Project1"); 

} 
public static void main(String[] args) 
    { 
     //Empty 
    } 
} 

我建立PROJECT_1,并添加了JAR文件的依赖性项目2

Project_2示例代码:

package com.newsample; 
import com.sample.App; 

public class Appn 
{ 
    public static void main(String[] args) 
    { 
     App obj=new App(); 
    obj.hello(); 
    } 
} 

Project_2 pom.xml的依赖:

<dependency> 
     <groupId>com.sample</groupId> 
     <artifactId>project1</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    </dependencies> 

然而,当我尝试从JAR文件包,它抛出以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/App 

我已检查project_2 JAR文件,但App.class没有被添加到它。我的问题似乎太天真了,但不应该添加类,因为它是project_2的依赖项。有没有其他的方式来捆绑这使用maven?

+0

您是否在添加App类后重建了依赖项('mvn clean install')'project 1'? –

+1

jar文件只包含来自项目本身的类,而不包含其所有依赖项中的类。您需要在类路径中同时存在两个jar文件。 –

+0

@JBNizet;谢谢,设置类路径似乎是问题所在。您可以添加您的评论作为答案。将投票给它。 –

回答

0

jar工件的构建中不包含依赖关系。

How can I create an executable JAR with dependencies using Maven?

+1

我认为阴影插件比装配插件更容易使用。 –

+0

为什么不呢?与java一样,它只是众多可用选项之一。 – spi

+0

如果您认为此问题重复,请** [按照此处所述标记](https://stackoverflow.com/help/privileges/flag-posts)**。谢谢。 – Pang

1

可能重复使用遮阳插件生成可运行罐子(所有罐子它的依赖罐子爆炸)。

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>3.0.0</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
             implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <manifestEntries> 
             <Main-Class>com.....Application</Main-Class> 
            </manifestEntries> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build>