Maven:在一个Jar中编译所有依赖项

时间:2011-01-05 10:40:00

标签: maven-2

在项目的pom中,我添加了与范围编译的依赖关系。这是一个包含一些类文件和jar的jar文件。我当前的java文件需要内部jar的依赖jar来编译。

但maven编译目标返回编译错误。 :banghead:

编译所需的所有jar都在单个jar文件中,该文件依赖于............................. < / p>

请帮助我!

我的pom:

<project>
  <!-- ... -->
  <dependencies>
    <dependency>
      <groupId>eagle</groupId>
      <artifactId>zkui</artifactId>
      <version>360LTS</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>./src/main/java</sourceDirectory>
    <outputDirectory>./target/classes</outputDirectory>
    <finalName>${project.groupId}-${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

错误:

  

包org.zkoss.zk.ui不存在   这个包org.zkoss.zk.ui在jar中   文件zkex.jar是依赖的   jar eagle:zkui:360LTS jar文件

请帮助我!!!! :jumpingjoy:

提前谢谢

3 个答案:

答案 0 :(得分:0)

嗯,我想你可以

  • 使用dependency:unpack将jar解包到目标/ lib左右(编译前)
  • 通过排除所有内容来停用compiler:compile

    <excludes>
        <exclude>**/*.java</exclude>
    </exclude>
    
  • 使用antrun:run和ant javac任务来编译源代码,类似这样(将执行绑定到阶段compile):

    <target>
        <javac srcdir="${project.build.sourceDirectory}"
               destdir="${project.build.outputDirectory}">
            <classpath>
                <pathelement path="${maven.compile.classpath}"/>
                <fileset dir="${project.build.directory}/lib">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
        </javac> 
    </target>
    

但是,虽然这可以帮助您编译您的应用程序,但它无法帮助您运行部署您的应用程序。

答案 1 :(得分:0)

您可以使用该元素执行此操作:

<dependencies>
    <dependency>
      <groupId>groep.does.not.matter</groupId>
      <artifactId>neither-does-artifactId</artifactId>
      <version>and.nor-does-version</version>
      <type>jar</type>
      <scope>system</scope>
      <systemPath>${project.baseDir}/lib/jarname.jar</systemPath>
    </dependency>
  </dependencies>

你需要引用的jar(并且在你的类路径中)是lib / jarname.jar,lib目录位于项目的根目录中。

答案 2 :(得分:0)

我相信你实际上没有使用正确的依赖项。 ZK实际上有here所描述的Maven存储库。

您需要检查所需的依赖项。例如对于zkex,你需要类似的东西:

    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkex</artifactId>
        <version>${zk.version}</version>
    </dependency>

您还需要添加ZK Maven存储库:

    <repositories>
        <repository>
            <id>zk repository</id>
            <url>http://mavensync.zkoss.org/maven2</url>
        </repository>
        <!-- If Using ZK EE or ZK PE Respository (not evaluation version), you need to add login info into ~/.m2/settings.xml -->
        <repository>
            <id>ZK PE Evaluation</id>
            <url>http://mavensync.zkoss.org/zk/pe-eval</url>
        </repository>
        <repository>
            <id>ZK EE Evaluation</id> 
            <url>http://mavensync.zkoss.org/zk/ee-eval</url>
        </repository>
    </repositories>
祝你好运! : - )