I tried #3 but that gave me an error about another dependency
(org.objectweb.asm?? something like that). For option #2, how do I get
gradle to build the class-path for me so I don't have to manually copy/past
JAR names in my gradle script?

On Mon, Jan 18, 2010 at 9:11 PM, Adam Murdoch <[email protected]> wrote:

>
>
> On 19/01/10 12:48 PM, Craig Wickesser wrote:
>
> So I added the following to my build.gradle:
>
>  task copyToLib(dependsOn: configurations.default.buildArtifacts, type:
>> Copy) {
>
>     into('build/output/lib')
>
>     from configurations.default
>
>     from configurations.default.allArtifacts*.file
>
> }
>
>
>  Then I ran:
> $ gradle build
> $ gradle copyToLib
>
>  Next I tried to run the JAR...
> $ cd build\output\lib
> $ dir
>
>   Directory of C:\work\projects\playground\mrhakibook\build\output\lib
>
>  01/18/2010  08:41 PM    <DIR>          .
> 01/18/2010  08:41 PM    <DIR>          ..
> 07/09/2008  03:04 PM         1,323,005 ant-1.7.1.jar
> 07/09/2008  03:04 PM            12,143 ant-launcher-1.7.1.jar
> 01/13/2007  01:28 AM           445,288 antlr-2.7.7.jar
> 08/27/2006  08:49 PM            34,832 asm-2.2.3.jar
> 08/27/2006  08:49 PM            17,977 asm-analysis-2.2.3.jar
> 08/27/2006  08:49 PM            16,248 asm-tree-2.2.3.jar
> 08/27/2006  08:49 PM            34,989 asm-util-2.2.3.jar
> 12/02/2009  07:11 AM         3,987,117 groovy-1.6.7.jar
> 02/22/2008  02:53 PM            87,325 jline-0.9.94.jar
> 03/03/2006  06:22 PM           120,640 junit-3.8.2.jar
> 01/18/2010  08:41 PM            30,589 foo-1.0-SNAPSHOT.jar
>
>  $ java -jar foo-1.0-SNAPSHOT.jar
>
>  and I get..
>
>  Exception in thread "main" java.lang.NoClassDefFoundError:
> groovy/lang/GroovyObject
>         at java.lang.ClassLoader.defineClass1(Native Method)
>         at java.lang.ClassLoader.defineClass(Unknown Source)
>         at java.security.SecureClassLoader.defineClass(Unknown Source)
>         at java.net.URLClassLoader.defineClass(Unknown Source)
>         at java.net.URLClassLoader.access$000(Unknown Source)
>         at java.net.URLClassLoader$1.run(Unknown Source)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         at java.lang.ClassLoader.loadClassInternal(Unknown Source)
> Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
>         at java.net.URLClassLoader$1.run(Unknown Source)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         at java.lang.ClassLoader.loadClassInternal(Unknown Source)
>         ... 12 more
> Could not find the main class: org.mindscratch.foo.ParseMain. Program will
> exit.
>
>  I'm not sure why it can't find "GroovyObject"...the JAR is in the same
> directory as my "foo" jar.
>
>  I tried this as well:
>
>  $ java -cp . org.mindscratch.foo.ParseMain     ....and I get:
>
>  Exception in thread "main" java.lang.NoClassDefFoundError:
> org/mindscratch/foo/ParseMain
> Caused by: java.lang.ClassNotFoundException: org.mindscratch.foo.ParseMain
>         at java.net.URLClassLoader$1.run(Unknown Source)
>
>  I did verify the ParseMain class does exist in my "foo" jar.
>
>
> By using -cp . you're asking the jvm to look for class files in the current
> directory. This doesn'twork because the classes are all packaged into jars.
> Instead, you want to ask it to look for class files in each of the jars in
> the current directory.  Some ways you can do this:
>
> 1. Include each of the jar names in the argument to the -cp option, ie java
> -cp foo-1.0-SNAPSHOT.jar:groovy-1.6.7.jar:...
>
> 2. Include a 'Class-Path' attribute in the manifest of your jar which lists
> all of the jars, then you can run java -jar foo-1.0-SNAPSHOT.jar
>
> 3. Merge all of the jars together, as described in the cookbook, then you
> can run java -jar foo-1.0-SNAPSHOT.jar
>
>
>
>  Thanks in advance.
> craig
>
> On Sun, Jan 17, 2010 at 6:27 PM, Adam Murdoch <[email protected]>wrote:
>
>>
>>
>> On 18/01/10 4:15 AM, Craig Wickesser wrote:
>>
>> I'm trying to get an executable JAR that contains groovy code that I can
>> run by doing a simple: java -jar myapp.jar
>>
>>  Here's my build.gradle
>>
>>  usePlugin 'groovy'
>> usePlugin 'maven'  // Maven plugin to install artifact in local Maven
>> repo.
>>
>>  sourceCompatibility = '1.6'
>> targetCompatibility = '1.6'
>>
>>  manifest.mainAttributes("Main-Class" : "org.mindscratch.foo.ParseMain")
>>
>>  def localMavenRepo = 'file://' + new
>> File(System.getProperty('user.home'), '.m2/repository').absolutePath
>> repositories {
>>     // Use local Maven repo location. We don't need this if we only want
>> to install
>>     // an artifact, but we do need it if we want to use dependencies from
>> the local
>>     // repository.
>>     mavenRepo urls: localMavenRepo
>> }
>>
>>  // Project configuration:
>> version = '1.0-SNAPSHOT'
>> group = 'org.mindscratch.foo'
>>
>>  // The following line is not necessary. Default the install tasks
>> depends on the
>> // jar task, but this means no tests and checks are executed when we use
>> the
>> // install task. The following line makes the install tasks depend on the
>> build task
>> // and now all tests and checks are done before install is executed.
>> install.dependsOn ':build'
>>
>>
>>  repositories {
>>     mavenCentral()  // Define Maven central repository to look for
>> dependencies.
>> }
>>
>>  dependencies {
>>     groovy 'org.codehaus.groovy:groovy:1.6.7'  // group:name:version is a
>> nice shortcut notation for dependencies.
>>     testCompile 'junit:junit:4.7'
>> }
>>
>>
>>  task initProject(description: 'Initialize project directory structure.')
>> << {
>>     // Default package to be created in each src dir.
>>     def defaultPackage = 'org/mindscratch/foo'
>>
>>     ['java', 'groovy', 'resources'].each {
>>         // convention.sourceSets contains the directory structure
>>         // for our Groovy project. So we use this struture
>>         // and make a directory for each node.
>>         convention.sourceSets.all."${it}".srcDirs*.each { dir ->
>>             def newDir = new File(dir, defaultPackage)
>>             logger.info "Creating directory $newDir"  // gradle -i shows
>> this message.
>>             newDir.mkdirs()  // Create dir.
>>         }
>>     }
>> }
>>
>>
>>  I run:
>> $ gradle install -i
>> $ cd build/libs
>> $ java -jar foo-1.0-SNAPSHOT.jar
>>
>>  ..doesn't work b/c the Groovy jar isn't on the classpath (or inside my
>> JAR).  GUess what I need is a JAR that contians the Groovy jar inside of it
>> (maybe in a "lib" folder).  Can you help?
>>
>>
>>  The cookbook has some options for creating a JAR which contains its
>> compile or runtime dependencies:
>> http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar
>>
>> There's also a JIRA issue for making this easier:
>> http://jira.codehaus.org/browse/GRADLE-566
>>
>>
>> --
>> Adam Murdoch
>> Gradle Developerhttp://www.gradle.org
>>
>>
>
> --
> Adam Murdoch
> Gradle Developerhttp://www.gradle.org
>
>

Reply via email to