Java - 903 Bytes##
Here is my Java take at it, no compression algorithms used, just a dictionary.
In a single line:
class R {static String n(String w){return "Never gonna "+w+"\n";}public static void main(String[] args){String d[]={"(Ooh, give you up)\n","(Ooh)\n",n("give you up")+n("let you down")+n("run around and desert you")+n("make you cry")+n("say goodbye")+n("tell a lie and hurt you")+"\n","(Give you up)\n",n("give, never gonna give"),"We've known each other for so long\nYour heart's been aching but\nYou're too shy to say it\nInside we both know what's been going on\nWe know the game and we're gonna play it\n","\nI just wanna tell you how I'm feeling\nGotta make you understand\n\n","We're no strangers to love\nYou know the rules and so do I\nA full commitment's what I'm thinking of\nYou wouldn't get this from any other guy","And if you ask me how I'm feeling\nDon't tell me you're too blind to see\n\n","\n"};int n[]={7,6,2,5,8,2,2,0,0,1,4,3,1,4,3,9,5,6,2,2,2};for(int i:n){System.out.print(d[i]);}}}
And pretty printed for readability
class R {
static String n(String w) {
return "Never gonna " + w + "\n";
}
public static void main(String[] args) {
String d[] = {"(Ooh, give you up)\n",
"(Ooh)\n",
n("give you up") +
n("let you down") +
n("run around and desert you") +
n("make you cry") +
n("say goodbye") +
n("tell a lie and hurt you") +
"\n",
"(Give you up)\n",
n("give, never gonna give"),
"We've known each other for so long\nYour heart's been aching but\nYou're too shy to say it\nInside we both know what's been going on\nWe know the game and we're gonna play it\n",
"\nI just wanna tell you how I'm feeling\nGotta make you understand\n\n",
"We're no strangers to love\nYou know the rules and so do I\nA full commitment's what I'm thinking of\nYou wouldn't get this from any other guy",
"And if you ask me how I'm feeling\nDon't tell me you're too blind to see\n\n",
"\n"
};
int n[] = {7, 6, 2, 5, 8, 2, 2, 0, 0, 1, 4, 3, 1, 4, 3, 9, 5, 6, 2, 2, 2};
for (int i : n) {
System.out.print(d[i]);
}
}
}